0

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

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

知道该怎么做吗?

4

2 回答 2

1

对的,这是可能的。你会使用ptr_char + i移动到第ith 字符串。字符串的长度不同并不重要。重要的是指针的长度相同,当然它们是相同的。

                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然后为th 字符串分配内存并将ith设置char*为指向该内存。

于 2012-06-30T03:45:08.403 回答
0

char **pptr_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);
....
于 2012-06-30T04:00:38.380 回答