C函数读取整个文件不起作用

时间:2016-02-18 01:10:16

标签: c

我编写了这个小程序,将整个文件读入char*,然后我可以比从文件中更自由地解析。但是,当我运行它时,没有任何文件似乎被复制到buf,因为打印字符串或单个字符似乎都不起作用。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    FILE *fp = fopen("/home/<not shown>/.profile", "r");
    fseek(fp, 0, SEEK_END);
    char *buf = malloc(ftell(fp) + 1);
    fseek(fp, 0, SEEK_SET);
    while ((*buf++ = fgetc(fp)) != EOF) {}
    printf("%s\n", buf);
}

我对c很新,所以你能帮我找到这个难题的答案吗?

1 个答案:

答案 0 :(得分:1)

当您完成循环时,buf指向缓冲区的末尾,而不是开头。您应该在循环期间使用单独的变量。

fseek(fp, 0, SEEK_END);
char *buf = malloc(ftell(fp) + 1);
fseek(fp, 0, SEEK_SET);
char *p = buf;
while (*p++ = fgetc(fp)) != EOF) {}
// Replace EOF with null terminator          
*(p-1) = '\0';