0

私は、実行ごとに、私の Strings 配列で、新しい str を毎回宣言しているので、pos に新しい str を格納しているという印象を受けています。最初の実行こんにちはもこんにちはになります。Strings の実行ごとに異なる char 配列が必要なだけなので、後で各位置に異なる文字列があります。要件は、malloc、realloc、calloc を使用できないことです。最初の for ループの 2 回目の繰り返しで、前のものとは独立した char str で作成していると本当に思っていました。私を助けてください。

int pos = 0;
for(i=0; i<4; i++)
{
   if(file [i]=='a')
   {
      char str[5];
      int b=0;
      for(b; b<3; bi++)
      {
         str[b]=file[b];
      }
      Strings[pos]=str;
      pos++;
   }
}
4

1 に答える 1

0

これを行う場合:

Strings[pos]=str;

その配列要素を「str」が指すバッファに設定するだけです。文字列はコピーされません。「str」バッファは変更されないため、配列全体が同じバッファを指すことになります。

むしろ、その行で文字列をコピーする必要があります。malloc を使用できない場合は、Strings 配列の各配列要素 (別名 2 次元配列) にバッファーが必要です。多分それを次のように宣言します:

char Strings[5][5];

次に、strcpy を使用して「str」にコピーする代わりに、文字列を「Strings[pos]」にコピーします。

于 2013-02-13T05:08:48.507 に答える