我的代码中有以下代码段,我尝试使用动态分配的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次。
答案 0 :(得分:3)
您的代码在此处介绍了问题:
reference[no_of_ref]=malloc(strlen(temp_in) + 1);
reference[no_of_ref++]=temp_in;
这是因为C中指针的赋值会影响指针和指针,而这些指针不会对其内容做任何事情。您应使用memcpy
或strcpy
:
reference[no_of_ref]=malloc(strlen(temp_in) + 1);
strcpy(reference[no_of_ref], temp_in);
no_of_ref+=1;