2017-09-16 37 views
0

まず、別のトピックが私の問題に関連している場合は申し訳ありませんが、私は適切なものに到達することはできません。C - fgetsと配列内のすべての行を格納

私は可能な限り明確にしようとします。

私はコースプロジェクトを実現しています。これは、約10個のテキストファイルを配列に保存してからデータを扱う必要があります。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int* argc, char* argv[]){ 
    char* c = "./example.txt"; 
    char s[500]; 

    char* lignes[100]; 
    int sizeLignes = 0; 

    printf("%s \n\n", c); 

    FILE* myFile = NULL; 
    myFile = fopen(c, "r"); 

    if (myFile != NULL){ 
     int n; 
     while (fgets(s, 500, myFile) != NULL){ 
      printf("%d \n\n", sizeLignes); 
      lignes[sizeLignes] = s; 
      printf("%s", lignes[sizeLignes]); 
      sizeLignes++; 
     } 

     printf("%s", lignes[1]); 
     printf("%s", lignes[2]); 
     printf("%s", lignes[3]); 

    }else{ 
     printf("Wrong file"); 
    } 
    fclose(myFile); 
    return 0; 
} 

私のVAR:私はすべての行を取得するためのfgetsを使っ

(治療が問題ではない)、彼らは私が[]

コードのchar $への "文字列" を渡しますもしループごとにそれを印刷すればよいのです。 ループ内にlignes[sizeLignes]を印刷しても良いです。 外に値を印刷しようとすると...最後の4単語などを保存するようなものです。

詳細情報が必要ですか?事前に

おかげで、

Izio

+0

文字列を配列にコピーする必要があります。あなたは 's'へのポインタを配列に格納するだけで、次のループ反復で' s'を上書きします。 – pstrjds

答えて

0

代わりリーニュ[sizeLignes] = Sのstrcpyの(リーニュ[sizeLignes]、複数可)を使用する必要があります。 実際にはstrcpy_sも使用できます。また、文字列にメモリを割り当てる必要があります。 だから私はそれが必要ではないであろうと、次のコード

lignes[sizeLignes] = malloc(500); 
strcpy(lignes[sizeLignes], s); 

が動的メモリーの解放をお勧めします。

関連する問題