2013-03-22 6 views
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"를 올바르게 인쇄합니다.포인터 배열 - 포인터 배열을 다른 포인터로 저장하는 방법

답변

2

*q = *pq[0] = p[0]과 동일합니다. 그렇기 때문에 q[0] 인쇄가 작동하지만 q[1] 인쇄는 그렇지 않습니다. 모든 포인터를 복사하려면 for 루프 또는 memcpy() 중 하나가 필요합니다.

memcpy(q, p, sizeof(p)) 
+0

하지만 * p [2]를 파일 쓰기 (fd, p, size)로 쓸 수 없습니다. – Angus

+1

'sizeof (p)'는 '2'문자 포인터의 크기를 '8'로 반환합니다. 두 문자열을 모두 파일에 쓰려면 루프로 작성해야합니다. – Ganesh

+1

@Angus : 왜 파일에 * 포인터 *를 쓰려고할까요? 포인터는 파일 및 향후 프로그램 (이 프로그램 포함)에 의미가 없으므로 심각한 오류입니다. 어느 책을 읽고 있니? – Sebivor

0

케빈이 언급 여기에 같은 문제는 당신이 다른 배열을 통해 포인터를 memecpy하기 위해 필요한 당신이 원하는 달성하기 위해, 그래서 당신이해야하는 ... 포인터의 배열 것입니다. (이 있습니다 예를 들어, 값이

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

*q == 0xaaa 

:) 마음 때문에 그렇게

q[0] = 0xaaa 

q는 [1] 정크

그래서

당신은 배열을 복사하지 않는, 오직 하나의 값입니다 :) 희망이 도움이됩니다!

0

나는 당신이 원하는 것을 알고 있습니다. 당신은 "* q = * p;"를 사용하여 p의 모든 포인터를 q에 할당한다고 생각합니다. 하지만 p [0]을 q [0]에 할당하면 p와 q는 포인터가 아닙니다. 그것들은 배열 일 뿐이므로이 구문을 사용하여 전체 배열을 다른 배열로 복사 할 수는 없지만 memcpy를 사용하거나 그 요소를 하나씩 할당 할 수 있습니다.

0

올바르게 수행하려고하는 것을 이해했다면 을 이중 포인터 **q으로 선언하고이를 q = p과 같이 지정하십시오.