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= * p;」を使用して、p内のすべてのポインターをqに割り当てると思います。しかし、p[0]をq[0]に割り当てるだけで、pとqはポインタではないことをご存知でしたか。これらは単なる配列であり、この構文を使用して配列全体を別の配列にコピーすることはできませんが、memcpyを使用するか、その要素を1つずつ割り当てることができます。

于 2013-03-22T01:57:26.817 に答える
0

ケビンが言及したようなここでの問題は、あなたが持っているのはポインターの配列であることです...したがって、あなたが望むことを達成するには、ポインターを他の配列にmemcpyする必要があります。これは、(これらは値の例です:)

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

*q == 0xaaa

それで

q[0] = 0xaaa

q[1] はジャンクです

したがって、配列をコピーするのではなく、単一の値のみをコピーしています:)これが役立つことを願っています!

于 2013-03-22T01:20:44.583 に答える
0

あなたが正しく達成しようとしていることを理解したらq、 double pointer として宣言し、次の**qように割り当てますq = p

于 2013-03-22T02:13:59.220 に答える