我试着写的程序应该能够读取长度不超过8个字符的字符串,并检查这个字符串是否出现在文件中。我决定使用'读'系统功能,但我已经想出了这个功能的奇怪行为。由于它是手动编写的,所以在到达文件末尾时它必须返回0,但在我没有更多字符的情况下,它仍然读取'\ n'并返回1(读取的字节数)(I'已经检查了读取字符的ASCII码,它实际上是'\ n'的10)。所以考虑到这个事实,我改变了我的代码,它的工作,但我仍然不明白为什么这样的行为。这里是我的函数的代码:'读'系统函数的奇怪行为
int is_present(int fd, char *string)
{
int i;
char ch, buf[9];
if (!read(fd, &ch, 1)) //file is empty
return 0;
while (1) {
i = 0;
while (ch != '\n') {
buf[i++] = ch;
read(fd, &ch, 1);
}
buf[i] = '\0';
if (!strncmp(string, buf, strlen(buf))) {
close(fd);
return 1;
}
if(!read(fd, &ch, 1)) //EOF reached
break;
}
close(fd);
return 0;
}
读完'\ n'后它终止了吗? –
'strncmp(string,buf,strlen(buf))'与'strcmp(string,buf)'没有区别。也许你的意思是'strncmp(string,buf,sizeof(buf))'? –