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

时间:2015-10-09 07:29:11

标签: c arrays file-io

我刚从中读取的文件名称由一行分隔。会发生什么事情是程序试图打印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;
}

1 个答案:

答案 0 :(得分:1)

第一个问题,在您的代码中,

while(fgets(line,255,fp))

line未初始化使用。没有为line分配内存。它调用undefined behavior

然后,在使用返回的文件指针之前,您没有检查fopen()是否成功。再次,可能的UB。

最后,通过说

 line_array[i]=line;

您所做的是将line本身存储到line_array[n]的所有匹配项中,因此对于后来的printf()循环,正在打印line的最新内容一遍又一遍。

将(S):

  • 将内存分配给line或使用固定长度数组。
  • 在使用返回的指针之前检查fopen()是否成功。
  • 为每个line_array[n]分配内存,并使用strcpy()复制内容。另外,您也可以直接使用strdup()