簡體   English   中英

文件I / O和字符串數組遇到問題

[英]Having trouble with file I/O and string arrays

我正在讀取的文件的名稱用行分隔。 發生的情況是該程序嘗試打印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內存。 它調用未定義的行為

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

最后,通過說

 line_array[i]=line;

您要做的是將line本身存儲到所有出現的line_array[n] ,因此對於以后的printf()循環,將一遍又一遍地打印line的最新內容。

解決方案(S):

  • 將內存分配給line或使用固定的長度數組。
  • 在使用返回的指針之前,請檢查fopen()是否成功。
  • 將內存分配給每個line_array[n]並使用strcpy()復制內容。 另外,您也可以直接使用strdup()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM