C:不能动态按预期工作的char指针数组

时间:2013-11-04 04:02:58

标签: c arrays realloc char-pointer

我的代码中有以下代码段,我尝试使用动态分配的char *数组来保存来自stdin的字符串。

char **reference
reference = calloc(CHUNK, sizeof(char *));

我使用临时静态数组首先存储来自stdin的字符串,然后根据某个条件将其复制到char *数组。我在运行时为个人char *分配内存。

                        reference[no_of_ref]=malloc(strlen(temp_in) + 1);
                        reference[no_of_ref++]=temp_in;
//                   printf(" in temp : %s , Value : %s   , Address of charp : %p\n",temp_in,reference[no_of_ref-1],reference[no_of_ref-1]);
                        memset(&temp_in,'\0',sizeof(temp_in));
                        pre_pip = -1;
                }

        /*If allocated buffer is at brim, extend it by CHUNK bytes*/
                if(no_of_ref == CHUNK - 2)
                        realloc(reference,no_of_ref + CHUNK);

所以no_of_ref保存最终收到的字符串总数。例如,但是当我打印整个reference数组以查看每个字符串时,我得到的是最后一个字符串,打印20次。

1 个答案:

答案 0 :(得分:3)

您的代码在此处介绍了问题:

reference[no_of_ref]=malloc(strlen(temp_in) + 1);
reference[no_of_ref++]=temp_in;

这是因为C中指针的赋值会影响指针和指针,而这些指针不会对其内容做任何事情。您应使用memcpystrcpy

之类的内容
reference[no_of_ref]=malloc(strlen(temp_in) + 1);
strcpy(reference[no_of_ref], temp_in);
no_of_ref+=1;