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



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

由于所有字符串的长度都不相同,指针算术将如何计算,即*ptr_char+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 个字符串分配内存,并将第 ichar*设置为指向该内存。

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

最新更新