0
#include<stdio.h>
int main(){
 char *p[2];
 char *q[2];
 char *a = "Hello";
 char *b = "world";
 p[0] = a;
 p[1] = b;
 *q = *p;
 printf("\n %s \n",q[0]);
 printf("\n %s \n",q[1]);
 return 0;
}

我想将存储在 p 中的指针存储到 q。当试图打印 q[1] 时,我得到一个垃圾值。但是 q[0] 正确打印“Hello”。

4

4 回答 4

2

*q = *p和 是一样的q[0] = p[0]。这就是为什么打印q[0]有效但打印q[1]无效的原因。如果要复制所有指针,则需要for循环或memcpy().

memcpy(q, p, sizeof(p))
于 2013-03-22T00:45:46.273 回答
0

如果我理解您要正确完成的工作,请声明q为双指针**q,并像这样分配它q = p

于 2013-03-22T02:13:59.220 回答
0

像凯文提到的问题是你所拥有的是一个指针数组......所以为了完成你想要的你需要将指针memcpy到另一个数组中。这是因为(这些是示例值,请注意 :)

p[0] = 0xaaa
p[1] = 0xbbb

*q == 0xaaa

所以

q[0] = 0xaaa

q[1] 是垃圾

所以你没有复制数组,只有一个值:) 希望这会有所帮助!

于 2013-03-22T01:20:44.583 回答
0

我明白你想做什么。您认为您使用“*q = *p;”将 p 中的所有指针分配给 q。但是你知道吗,只要把 p[0] 赋给 q[0],p 和 q 就不是指针。它们只是一个数组,您不能使用此语法将整个数组复制到另一个数组,但您可以使用 memcpy 或将其元素一个一个地分配。

于 2013-03-22T01:57:26.817 回答