gpt4 book ai didi

c - 使用双指针打印指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:33 25 4
gpt4 key购买 nike

根据我在该站点上发现的其他查询,我尝试使用 **双指针打印指向字符(字符串)的指针数组,如下所示:

char *input=malloc(128), *color[7]={0}, **colors=malloc(8); 

fgets(input, 128, stdin);
sscanf(input, "%s%s%s%s%s%s", &color[0], &color[1], &color[2], &color[3], &color[4], &color[5]);
color[6]=NULL;
colors=color;

while(*colors)
printf("%s ", colors++);

我从上面收到的输出似乎将每个输入字符串压缩到 4 个字节,然后如果超过四个字节则溢出,因为如果我键入:“黑红金白绿蓝”,例如,我收到: "blacred red goldwhitgreeblue goldwhitgreeblue whitgreeblue greeblue blue."非常令人沮丧。

我尝试取消引用 colors++,就像我在其他示例中看到的那样,但这会导致程序崩溃。最终,printf 仅用于调试。这是我试图创建的 char ** (void) 函数的一部分,用于将我尝试打印的内容分配给 char ** 类型的局部变量。我该如何解决这个问题?

最佳答案

当你做的时候

char **colors = malloc(8);

您只为变量colors 分配了 8 个字节。不足以存储六个字符串。如果您想要八个字符串,为什么不简单地创建一个包含八个字符串的数组?

char *colors[8] = { NULL };

上面的声明将 colors 声明为一个包含八个指向 char 的指针的数组,所有指针都初始化为 NULL

如果您迫切需要分配堆,那么您可以这样做

char **colors = calloc(8, sizeof(char *));

我使用 calloc 来确保分配的内存是零初始化的(即所有指针都将为 NULL)。


此外,sscanf 不会自动为它扫描的字符串分配空间,您必须手动分配空间。最简单的可能是对格式代码使用 'm' 修饰符,例如

sscanf(input, "%ms %ms %ms %ms %ms %ms",
&color[0], &color[1], &color[2], &color[3], &color[4], &color[5]);

关于c - 使用双指针打印指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com