我正在读取的文件的名称由一行分隔。发生的事情是程序尝试打印 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;
}
第一个问题,在你的代码中,
while(fgets(line,255,fp))
line
未初始化使用。没有分配给 line
的内存。它调用 undefined behavior .
那么,在使用返回的文件指针之前,您没有检查 fopen()
是否成功。同样,可能的 UB。
最后,通过说
line_array[i]=line;
你所做的是将 line
本身存储到 line_array[n]
的所有出现处,因此对于后面的 printf()
循环,行
的最新内容被一遍又一遍地打印。
解决方案:
- 将内存分配给
行
或使用固定长度的数组。
- 在使用返回的指针之前检查
fopen()
是否成功。
- 为每个
line_array[n]
分配内存并使用 strcpy()
复制内容。否则,你可以直接使用strdup()
,也是。
我是一名优秀的程序员,十分优秀!