我試着寫的程序應該能夠讀取長度不超過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))'? –