read() 看到空字符而不是正确的字节

read() seeing null character instead of proper byte

我正在读取二进制文件并将数据添加到 RB 树中。在我的文件中,前四个字节是一个ip地址,接下来的四个字节是一个数字,接下来的x个字节是一个以空字符结尾的字符串。

我意识到我应该读取缓冲的字节数,然后对其进行处理,但这是针对我们正在逐步设计的项目(因此下一步是下一步)。所以目前我正在做的是一次读取一个字节并处理它,直到我读取一个空字符。

我的代码的相关部分如下所示:

int fd, i, check, numNames;
unsigned char fourBytes[4];
char curChar;
char buffer[255];

fd = open("converted", O_RDONLY);

check = read(fd, fourBytes, 4);
if(check < 4) break;
strcpy(m->ip, fourBytes);

check = read(fd, fourBytes, 4);
if(check < 4) break;
numNames = *(int *)fourBytes;

// I have a loop here but in the scheme of my current issue it doesn't matter
check = read(fd, curChar, 1);

最后一行是我的问题所在,curChar 不包含下一个字节,它包含一个空字符(尽管我知道下一个字节不为空)。为什么是这样?我试过弄乱我的数据类型、缓冲区大小、使用 memset() 以及其他一些愚蠢的事情。我对系统调用不是很熟悉,所以我不太确定从这里去哪里。

非常感谢任何帮助。

正如您在此处给出的那样,curChar 是一个 char,但您将其传递给 read(2) 就好像它是一个 char*。由于您没有提到获得 SIGSEGV,我确定这不是您的实际代码...