我正在尝试编写一个代码来将字符串转换为指针数组,每个指针指向该字符串中的一个单词。当我编译下面的代码并在第一个循环内单独打印每个单词时,我得到的每个单词都没问题,但是在循环结束后我尝试通过循环打印数组中的每个单词,数组的所有元素都是相同的是字符串中的最后一个单词。
如果我们将“ab cd ef”传递给此函数,则最后一个循环将打印
ef then ef then ef
但如果我在第一个循环中打印数组的每个元素,它将打印
ab then cd then ef
代码
void sort(char* str)
{
char* a[100]={NULL};
char *tStr2,*min,*temp;
tStr2=(char*)malloc(strlen(str));
int i=0,i2=0,j=0;
while(i<=strlen(str))
{
if(str[i]!=' ' && i!=strlen(str))
{
tStr2[i2]=str[i]; //copy every word separately to tStr2[]
i2++;
}
else
{
tStr2[i2]=NULL;
a[j]=tStr2; //word is complete --> copy it to the array
printf("%s \n",a[j]); //print every word
j++;
i2=0; //initializes the word counter
}
i++;
}
i=0;
for (i=0;a[i];i++) //loop is complete , print all array elements
printf("%s \n",*a[i]);
}
答案 0 :(得分:0)
a[j]=tStr2;
将相同的指针复制到a[]
的各种元素。因此,稍后当代码打印a[j]
时,它会引用文本。
代码需要在各种a[j]
元素中保存不同的指针。也许就像普通的,但非标准的strdup()
。
a[j] = strdup(tStr2);
free()
此分配所需的其他代码。
另一种方法是复制str
一次,将其' '
替换为'\0'
,并a[j]
指向各种开头&#34;字&#34;。