我的印象是,在每次运行中,在我的Strings数组中,我在pos中存储一个新的str,因为我每次都声明它,而是在第二次运行时如果addstr成为你好,并且在第一次运行它嗨,第一次运行喜也成为你好。我只想在Strings的每次运行中使用不同的char数组,所以稍后在每个位置我都有不同的字符串。要求是我不能使用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++;
}
}
答案 0 :(得分:0)
执行此操作时:
Strings[pos]=str;
它只是将该数组元素设置为'str'指向的缓冲区。它不会复制字符串。 'str'缓冲区永远不会改变,因此整个数组最终指向同一个缓冲区。
相反,在那一行你需要复制字符串。如果你不能使用malloc,那么你的Strings数组需要在每个数组元素(也就是2维数组)上有缓冲区。也许宣布它是这样的:
char Strings[5][5];
然后将字符串复制到'strings [pos]'而不是使用strcpy复制到'str';