我刚从中读取的文件名称由一行分隔。会发生什么事情是程序试图打印line_array
的内容,它将打印出txt文件中最后一行的大约20个。
#include <stdio.h>
FILE* fp;
int main(){
char* line;
const char* line_array[255];
int i= 0;
int b =0;
fp = fopen("noob.txt","r");
while(fgets(line,255,fp)){
line_array[i]=line;
printf("%s",line);
printf("%s",line_array[i]);
i++;
}
for(;b<i;b++){
printf("%s",line_array[b]);
}
fclose(fp);
return 0;
}
答案 0 :(得分:1)
第一个问题,在您的代码中,
while(fgets(line,255,fp))
line
未初始化使用。没有为line
分配内存。它调用undefined behavior。
然后,在使用返回的文件指针之前,您没有检查fopen()
是否成功。再次,可能的UB。
最后,通过说
line_array[i]=line;
您所做的是将line
本身存储到line_array[n]
的所有匹配项中,因此对于后来的printf()
循环,正在打印line
的最新内容一遍又一遍。
将(S):