我试图从stdin读入并将输入打印到文件,如果输入退出然后我想停止程序。但是,这似乎不起作用,如果我键入“quit”时未激活if子句。这段代码有什么问题?
while( (n_char = read(0, (void *)buffer, 10)) != 0){
if (strcmp(buffer, "quit") == 0){
printf("equal\n");
exit(0);
}
//Display the characters read
n_char = write(inFile, buffer,n_char);
}
答案 0 :(得分:1)
read()
不会将空字节终止添加到buffer
。但是strcmp()
期望它的参数以空字节结束。
在strcmp()
之前添加空字节:
buffer[n_char] = 0;
(如果n_char
为10,那么您需要确保buffer[n_char]
不会导致越界访问,即buffer
中至少有一个额外字节用于空终止。另一方面,你可以使用strncmp()`)。
另外,你的情况是错误的。 read()
可以在错误时重新调整-1,这将通过您的条件。将其更改为:
while( (n_char = read(0, buffer, 10)) > 0) {
请注意,我删除了对void *
。