gpt4 book ai didi

C 指向指针的指针 - 访问字符串列表

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:19 27 4
gpt4 key购买 nike

我正在尝试通过指针访问字符串数组。分配内存时它似乎工作正常,但如果我尝试再次迭代指针,则不知何故值会丢失。但是,指向的地址是正确的。

char **rows = (char **) malloc(sizeof(char) * 8);
int i;

for (i = 0; i < 5; i++) { //first time
*(rows + i) = malloc(sizeof(char) * 8);
sprintf(*(rows + i), "0x10%d", i);
printf("---%s@0x%x", *(rows + i), (rows + i));

}

for (i = 0; i < 5; i++) { //second time
printf("++++%s@0x%x", *(rows + i), (rows + i));
}

输出格式:值@地址

以上(第一个循环)将产生以下输出:

---0x100@0x1007e0
---0x101@0x1007e8
---0x102@0x1007f0
---0x103@0x1007f8
---0x104@0x100800

这是正确的值和对应地址。但是不知何故,当我再次尝试使用它们时,这些值丢失了,下面是第二个循环的输出:

++++@0x1007e0
++++0@0x1007e8
++++0x102@0x1007f0
++++0x103@0x1007f8
++++0x104@0x100800

显而易见,所有五个节点的地址都是正确的,但缺少起始节点的值。

问题:

为什么在有效地址的地址 0x1007e0 和 0x1007e8 处缺少值?

谢谢,

最佳答案

我认为这可能与您的代码没有为指针分配足够的空间有关:因为您分配的是八个指针,而不是八个字符,这一行

char **rows = (char **) malloc(sizeof(char) * 8);

应该是

char **rows = malloc(sizeof(char*) * 8);

进行此更改可解决问题 ( demo on ideone)。

关于C 指向指针的指针 - 访问字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17145191/

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