我正在阅读二进制文件并将数据添加到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()以及其他愚蠢的东西来搞乱。我对系统调用不是很熟悉,所以我不太确定从哪里去。
任何帮助,非常感谢。
你*不能*像这样投射指向'int *'的指针,这是一个别名错误。您必须使用memcpy或联合。 –
另外'strcpy(m-> ip,...)'是错误的,因为'fourBytes'肯定不是空终止的。 –
(相反,你应该直接阅读'm-> ip','&numNames' ...) –