1

我的代码中有以下片段,我试图使用动态分配的char *数组来保存来自标准输入的字符串。

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);

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

4

1 回答 1

3

您的代码在这里介绍了问题:

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

那是因为 C 中的指针赋值会影响指针并且只影响指针,它不会对其内容做任何事情。你应该使用类似memcpyor的东西strcpy

reference[no_of_ref]=malloc(strlen(temp_in) + 1);
strcpy(reference[no_of_ref], temp_in);
no_of_ref+=1;
于 2013-11-04T04:09:02.143 回答