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

时间:2016-09-27 19:17:53

标签: c arrays pointers

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

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

1 个答案:

答案 0 :(得分:0)

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

代码需要在各种a[j]元素中保存不同的指针。也许就像普通的,但非标准的strdup()

一样简单
a[j] = strdup(tStr2);

free()此分配所需的其他代码。

另一种方法是复制str一次,将其' '替换为'\0',并a[j]指向各种开头&#34;字&#34;。