变量char **pptr_char
的开头为NULL
。但随后程序继续进行,我们从用户那里获取字符串输入。每个字符串都存储在**pptr_char
中,因此需要在X-和Y-维度中动态分配内存。
这可能在C?
由于所有字符串的长度不同,指针算法如何工作,即执行*ptr_char+1
转到下一个字符串?
知道怎么做吗?
答案 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);
....