gpt4 book ai didi

c++ - 将字符数组传递给函数 |奇怪的错误

转载 作者:行者123 更新时间:2023-11-28 00:53:27 25 4
gpt4 key购买 nike

基本上我有一个缓冲区,我在其中寻找各种标志以从二进制文件格式中读取某些字段。我已将文件读入缓冲区,但当我开始编写代码以在缓冲区中搜索标志时,我立即遇到了困难。我是 C++ 菜鸟,但这是我所拥有的:

void FileReader::parseBuffer(char * buffer, int length)
{
//start by looking for a vrsn
//Header seek around for a vrns followed by 32 bit size descriptor
//read 32 bits at a time
int cursor = 0;
char vrsn[4] = {'v','r','s','n'};
cursor = this->searchForMarker(cursor, length, vrsn, buffer);
}

int FileReader::searchForMarker(int startPos, int eof, char marker[], char * buffer)
{
int cursor = startPos;
while(cursor < eof) {
//read ahead 4 bytes from the cursor into a tmpbuffer
char tmpbuffer[4] = {buffer[cursor], buffer[cursor+1], buffer[cursor+2], buffer[cursor+3]};
if (strcmp(marker, tmpbuffer)) {
cout << "Found: " << tmpbuffer;
return cursor;
}
else {
cout << "Didn't Find Value: " << marker << " != " << tmpbuffer;
}
cursor = cursor + 4;
}
}

我的标题看起来像这样:

#ifndef __FILEREADER_H_INCLUDED__
#define __FILEREADER_H_INCLUDED__

#include <iostream>
#include <fstream>
#include <sys/stat.h>



class FileReader {
public:
FileReader();
~FileReader();
int open(char *);
int getcode();
private:
void parseBuffer(char *, int);
int searchForMarker(int, int, char[], char *);
char *buffer;
};

#endif

我希望用 strcmp 找回 vrsn 的匹配,但我的结果看起来像这样

Didn't Find Value: vrsn != vrsn
Found:

看起来它在通过我要查找的 char 数组后,在第二次通过时找到了它。

相关十六进制代码

hex

最佳答案

您的问题有两个方面:

  1. strcmp成功时返回“0”,失败时不返回。阅读文档。

  2. strcmp期望以 null 结尾的字符串。你说你选择了非终止char数组,因为这是您的数据库库使用的。嗯,很好。但是,您仍然违反了 strcmp 的要求.使用 strncmp相反(它需要一个长度参数)或者,最好是实际编写 C++ 并开始使用 std::vector<char>和 friend 。

关于c++ - 将字符数组传递给函数 |奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com