gpt4 book ai didi

将字符串转换为字符指针数组

转载 作者:行者123 更新时间:2023-11-30 21:08:15 24 4
gpt4 key购买 nike

我正在尝试编写一段代码将字符串转换为指针数组,每个指针都指向该字符串中的一个单词。当我编译下面的代码并在第一个循环中单独打印每个单词时,我得到了每个单词,但是在循环完成后,然后我尝试通过循环打印数组中的每个单词,数组的所有元素都是相同的是字符串中的最后一个单词。

如果我们将“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]);
}

最佳答案

a[j]=tStr2; 将同一指针复制到 a[] 的各个元素。因此,稍后当代码打印 a[j] 时,它会引用文本。

代码需要在各个a[j]元素中保存不同的指针。也许就像常见但非标准的 strdup() 一样简单。

a[j] = strdup(tStr2);

free() 此分配需要额外的代码。

另一种方法是复制 str 一次,并将其 ' ' 替换为 '\0' 并具有 a[j] 指向各个开头的“单词”。

关于将字符串转换为字符指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39732643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com