0

我的印象是,在每次运行时,在我的 Strings 数组中,我都在 pos 存储一个新的 str,因为我每次都声明它,相反,如果 addstr 变为 hello,则在第二次运行时,在第一次运行时它是 hi,第一次运行 hi 也变成了 hello。我只想在字符串中每次运行时使用不同的字符数组,所以稍后在每个位置我都有不同的字符串。要求是不能使用malloc、realloc、calloc。我真的认为在第一个 for 循环的第二次迭代中,我在一个独立于前一个的 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 数组需要在每个数组元素(又名二维数组)处具有缓冲区。也许声明它是这样的:

char Strings[5][5];

然后不要使用 strcpy 复制到“str”,而是将字符串复制到“Strings[pos]”;

于 2013-02-13T05:08:48.507 回答