#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”。
答案 0 :(得分:2)
*q = *p
与q[0] = p[0]
相同。这就是打印q[0]
有效但打印q[1]
没有效果的原因。如果您想要复制所有指针,您需要for
循环或memcpy()
。
memcpy(q, p, sizeof(p))
答案 1 :(得分:0)
凯文提到的问题就是你所拥有的是一个指针数组......所以为了完成你想要的东西,你需要将指针存储到另一个数组中。这是因为(这些是示例值,请注意:)
p[0] = 0xaaa
p[1] = 0xbbb
*q == 0xaaa
所以
q[0] = 0xaaa
q [1]是垃圾
所以你没有复制数组,只有一个值:) 希望这有帮助!
答案 2 :(得分:0)
我明白你想做什么。您认为使用“* q = * p;”将p中的所有指针分配给q。但是你知道只是将p [0]分配给q [0],p和q不是指针。它们只是一个数组,你不能使用这种语法将整个数组复制到另一个数组,但你可以使用memcpy或逐个分配它的元素。
答案 3 :(得分:0)
如果我理解您要正确完成的操作,请将q
声明为双指针**q
,并将其指定为:q = p
。