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

标签 c linux ubuntu-10.04

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);
}

fread() returns the number of items successfully read

我认为下面这行应该改成

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/

相关文章:

c - 单线程如何完成多线程的工作?

c - 查找内存C中指针的值

linux - 用于检查进程并在未找到时重新启动程序的脚本

linux - 如何通过shell脚本运行代码?

linux - node js进程停留在linux ps

c - opencv Resize()问题

linux - Bash 'date -d' 错误?

c - 需要帮助理解 while 循环

将字符串复制到 char**

python - 在 HTML 文件中使用 pylab 创建的应用程序(使用 Django 创建)中使用图表