FREAD。 FSEEK。 FTELL。 "警告:未使用计算的值"

时间:2017-07-07 08:34:30

标签: c

如何代替

char text[10000]; 

DO

char text[fp_len];

我也收到了这个警告:

  

警告:未使用计算值

FILE *fp;
fp = fopen(path, "r");
int fp_len;
fseek(fp, 0, SEEK_END)+1;
fp_len = ftell(fp); 
fseek(fp, 0, SEEK_SET);
printf("%d---", fp_len);

char text[10000];
fread(text, fp_len, 1, fp);

printf("%s", text);

我还应该添加:

text[]= '\0'

到底部。 (以上printf)

2 个答案:

答案 0 :(得分:1)

您收到未使用值的警告,因为当您为返回值添加+1时,您什么都不做

fseek(fp, 0, SEEK_END)+1;

评估为

fseek(fp, 0, SEEK_END);

但编译器警告你,也许你忘了在某处分配结果。

要读取数据,请使用动态分配在HEAP区域中保留内存,否则如果fp_len太大,您可能会进入堆栈溢出。

char *text = malloc(sizeof(*text) * (fp_len + 1));

并且不要忘记包含stdlib.h

答案 1 :(得分:1)

如评论中所述fseek(fp, 0, SEEK_END)+1只是将fseek的返回码添加到1(为什么会这样做?),结果(无用)被删除。

现在,您可以使用char text[fp_len];创建一个可变长度数组(在C语言中完全合法),这可以工作,但通常自动变量空间不是很大,所以你可以有“堆栈溢出”,如果文件太大:在这种情况下,char *text = malloc(fp_len)是首选。

如果你想空终止它(仅当你想要printf文件的内容时才有用,并且如果文件包含文本),不要忘记将1加到你的缓冲区中你可以合法地做text[fp_len] = '\0';

除此之外:fseek(fp, 0, SEEK_SET);可能只是rewind(fp);