字符串比较,系统调用读取

时间:2017-02-08 18:00:07

标签: c

我试图从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);
}

1 个答案:

答案 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 *

的无情演员表