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

时间:2017-09-23 20:25:47

标签: c system-calls

我正在读取二进制文件并将数据添加到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()以及其他愚蠢的事情。我对系统调用不太熟悉,所以我不太确定从哪里开始。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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