是否可以使用指向char(char ** pptr_char)的指针来存储动态大小的字符串的动态数量?

时间:2012-06-30 03:31:23

标签: c memory pointers

变量char **pptr_char的开头为NULL。但随后程序继续进行,我们从用户那里获取字符串输入。每个字符串都存储在**pptr_char中,因此需要在X-和Y-维度中动态分配内存。 这可能在C?

由于所有字符串的长度不同,指针算法如何工作,即执行*ptr_char+1转到下一个字符串?

知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

是的,有可能。您可以使用ptr_char + i移动到i字符串。字符串的长度不一样并不重要。唯一重要的是指针是相同的长度,当然它们是。

                Points to memory location      Memory location contains
ptr_char            X                        a pointer to string1 (string could live anywhere)
ptr_char + 1        X+4 (or 8 for 64-bit)    a pointer to string2 (string could live anywhere)
ptr_char + 2        X+8 (or 16)              a pointer to string3 (string could live anywhere)

所以你首先分配一块内存来保存N char*(该块启动一个内存位置X(当然X是操作系统为你选择的内容 - 你无法控制。)

然后为i字符串分配内存,并将i char*设置为指向该内存。

答案 1 :(得分:0)

char **pptr_char是一个字符串数组(char指针)。 pptr_char[0]是第一个指针,pptr_char[1]是第二个指针,依此类推,这些指针指向的是什么并不重要。如果要将字符串存储在连续内存区域中,可以执行以下操作:

pptr_char    = (char**)malloc(20*sizeof(char*)); // say we have 20 strings max
pptr_char[0] = (char*) malloc(large chunk size)
strcpy(pptr_char[0], "string0");
pptr_char[1] = pptr_char[0] + strlen(pptr_char[0]+1);
strcpy(pptr_char[1], "string1");
pptr_char[2] = pptr_char[1] + strlen(pptr_char[1]+1);
....