gpt4 book ai didi

c - 遇到文件 I/O 和字符串数组的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:33 25 4
gpt4 key购买 nike

我正在读取的文件的名称由一行分隔。发生的事情是程序尝试打印 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() ,也是。

关于c - 遇到文件 I/O 和字符串数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33032440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com