我正在读取二进制文件并将数据添加到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()以及其他愚蠢的事情。我对系统调用不太熟悉,所以我不太确定从哪里开始。
非常感谢任何帮助。
答案 0 :(得分:1)
正如您在此处提供的那样,curChar
是char
,但您将其传递给read(2)
,就好像它是char*
一样。由于您没有提及获得SIGSEGV,我确定这不是您的实际代码...