-1

で区切られた正確に 2 行の入力ファイル (txt) があり\nます。

例えば:

FOO
BAR

ここで、最初の行 (この例では FOO) を achar **aに、2 行目 (BAR) を に配置する必要がありchar **bます。

これを機能させる方法がわかりません。説明できますか?

4

2 に答える 2

2

動的割り当てを使用する場合は、char ポインターを使用して char のベクトルを割り当てる必要があります(char *, not char **)

#define MAX_CHAR 100
char *buffer = (char*) malloc (MAX_CHAR * sizeof(char));

次に、ストリームから文字を読み取り、それらを C 文字列としてバッファに格納するfgets関数を使用します。

FILE * pFile;
pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) 
   perror ("Error opening file");
else {
  if(fgets (buffer, MAX_CHAR, pFile) != NULL)
    puts (buffer);
}

fclose (pFile);

このようにして、最初の行をバッファに保存し、fgets を 2 回使用して、必要な場所に最初と 2 番目の行を保存します。非動的ベクトルも使用できます。

次のことを忘れないでください。

free(buffer);

私の意見では、char ** は必要ありません。なぜなら、すべてのテキストを含む char * バッファーがあり、strtokを使用して分割できるからです。

于 2012-04-16T12:51:35.520 に答える
0

そこに2つのダブルポインターがある理由がわかりませんが、これは必要ではないと思います。

からファイルを読み取るには、.txtと呼ばれるものが必要ですFILE。これを使用してファイルを開きます。.txtたとえば、次のように なりますFILE *open = fopen("a.txt", "r");*openはコードで (開かれたファイルとして) 使用される名前であり、a.txtここでは.txt開きたいファイルを意味し、rはモードです。この場合はreadであり、ファイルからデータを読み取るだけであることを意味します。

ファイルを開いた後、ファイルの終わりまで、ループを使用してデータを読み取ります(もちろんそうです)。ここでは、次のように記述された条件を取得しましたwhile(!feof(open))

ループを取得したら、データを読み取る必要があります。ファイルからデータを読み取るには、ファイルからデータを読み取る という関数が必要fscanfです。次のように使用しますfscanf(open,"%s\n", temp[i]);。whileopenは以前に開いたファイルの名前で、に"%s\n"到達するまで文字列を読み取りたいことを意味し、 データを格納する変数です。\ntemp[i]

データを取得したので、もう必要ありFILEません。を使用して閉じてfclose(open)ください。

さて、私はあなたにそれを行う方法について説明したと思います.次はあなたがそれをコーディングする方法を見つける番です. )))

それでも混乱する場合は、検索してみてください。きっと参考になることがたくさんあると思います。

CMIIW :)

于 2012-04-16T15:18:59.070 に答える