我编写了这个小程序,将整个文件读入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很新,所以你能帮我找到这个难题的答案吗?
答案 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';