【发布时间】:2015-12-08 20:28:45
【问题描述】:
我尝试编写的程序应该能够读取长度不超过 8 个字符的字符串,并检查文件中是否存在这样的字符串。我决定为此使用“读取”系统功能,但我想出了这个功能的奇怪行为。因为它是手动编写的,当到达文件末尾时它必须返回 0,但在我的情况下,当没有更多字符可以读取时,它仍然读取 '\n' 并返回 1(读取的字节数)(I'已经检查了读取字符的 ASCII 码,它实际上是 10,即 '\n')。因此,考虑到这一事实,我更改了我的代码并且它起作用了,但我仍然无法理解为什么它会以这种方式运行。这是我的函数的代码:
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))?
标签: c