如何代替
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)
答案 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);