使用fread的代码中是否存在错误

使用fread的代码中是否存在错误

int main()
{
    FILE *read_fp;
    char buffer[BUFSIZ + 1];
    int chars_read;

    memset(buffer, '\0', sizeof(buffer));
    read_fp = popen("cat popen*.c | wc -l", "r");
    if (read_fp != NULL) {
        chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
        while (chars_read > 0) {
            buffer[chars_read - 1] = '\0';
            //buffer[chars_read] = '\0';
            printf("Reading:-\n %s\n", buffer);
            chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp);
        }
        pclose(read_fp);
        exit(EXIT_SUCCESS);
    }
    exit(EXIT_FAILURE);
}



我认为以下行应从
buffer[chars_read - 1] = '\0';


buffer[chars_read] = '\0';

我说对了吗?

最佳答案

您要转换为NULL终止读取的字符串吗?如果是这样,那么是的,buffer[chars_read] = '\0';将是这样做的方法。

除此之外,如果您这样做,则循环的结构可能更容易理解

do (
    chars_read = fread(....);
    if ( chars_read > 0) {
       buffer[chars_read] = '\0';
       printf(....);
    }
} while (chars_read > 0);

或更传统
while ((chars_read = fread(....)) > 0) {
       buffer[chars_read] = '\0';
       printf(....);
}

关于c - 使用fread的代码中是否存在错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6645461/

10-10 02:41