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,我确定这不是您的实际代码...
我正在读取二进制文件并将数据添加到 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,我确定这不是您的实际代码...