如何将char *分配给具有唯一条目的char *数组?

时间:2015-04-24 06:18:08

标签: c arrays

好的,所以不是很清楚。我想要做的是:

while (//something) {    
    char * tempuser;
    char * users[100];
    tempuser = "bobsmith" //I'm not actually doing this. But using a method that does the same thing
    users[i] = tempuser;
}

" bobsmith"每次循环都是不同的。如果我按原样运行5次,最后一次输入是" janetsmith"在此之前阵列中的所有5个位置,无论在分配时是否有所不同,所有最终都为" janetsmith"。我应该如何分配用户[i]以使其在所有索引中具有不同的值?

3 个答案:

答案 0 :(得分:0)

不要在循环体中创建数组users,并使用strdup在数组中创建具有相同内容的新字符串。请记住,您正在使用指针而不是某种字符串对象。数组中的每个条目都保存内存中文本的地址。

char *users[100]={0}; //one hundred pointers that are null so You don't use a wild one.
int i=0;
while(/*whatever*/) {
    char *tmp=getsometext(); //returns char pointer
    users[i++]=strdup(tmp); //copies contents pointed by tmp into new memory location and returns its address
}
//don't forget to free every pointer when You are done.

答案 1 :(得分:0)

这是因为您正在分配变量tempuser的地址。到最后,它将始终保持" janetsmith"的地址。尝试使用malloc()函数动态创建变量。

答案 2 :(得分:0)

char * users[100]; //with this you can use it outside while    
while (//something) {  

        static unsigned int i = 0;  
        //char * tempuser;

        //tempuser = "bobsmith" //I'm not actually doing this. But using a method that does the same thing
        users[i] = method_which_return_char_pointer();
        i++;
        if( 100 <= i)
          i=0;

    }

这是你的简短问题解释。