0

C で作業して、関数からの char* 戻り値で配列を埋めています

 char* files[4][12];
 int i = 0;
 for (;;)
    {
      char* file = get_value();
      strcpy(files[i],file);
      i++;
      if (i > 4 || external_condition)
      break;

     }

      // When I break out of
      // my for loop the following
      // code executes

      for (i = 0; i < 5; i++)
       {
        if (files[i] != NULL)
        manipulate(files[i]);
       }

私の問題は、ファイルのすべての要素に値を割り当てずに最初の for ループから抜け出すと、2 番目の for ループでの比較が失敗することです。files[0] と files[1] だけがコンテンツを持っている場合、ループは files[2]、file[3] と files[4] をとにかく処理します。

4

2 に答える 2

3

files「charへのポインターの配列の配列」として宣言されています。または、必要に応じて、char へのポインターの 2 次元配列として。

「 charfiles[i]へのポインターの配列」タイプですが、「charへのポインター」として使用します。それは間違いです。

そうは言っても、あなたが何をしたいのかは明らかではありません...多分ただ:

char files[5][13];

より理にかなっています。13 の文字列が必要になる可能性が高く (8.3 は 8+3+1=12 プラス 1 で終了 NUL になります)、そのうちの 5 つを使用しているようです。次に、それらをゼロに初期化します。

memset(files, 0, sizeof(files));

そしてチェックを使用します:

if (files[i][0])

テキストが初期化されているかどうかを確認します。

于 2012-09-01T19:48:12.967 に答える
0

char* files[4][12]char *ではなくの 2D 配列ですchar。おそらく、あなたのコードは次のようになることを意味していたのでしょう... 他の人が言ったことに耳を傾けることをお勧めします。まだ機能する短縮版を投稿しているだけです。

char files[5][12] = { { 0 } };
int i = 0;

do {
  strcpy(files[i], get_value());
} while (++i <= 4 && !external_condition);

while (i) {
  manipulate(files[--i]);
}
于 2012-09-01T21:05:58.837 に答える