2013-03-22 5 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 = *p - это то же самое, что и q[0] = p[0]. Вот почему печатает q[0], но печать q[1] - нет. Если вы хотите скопировать все указатели, вам понадобится либо цикл for, либо memcpy().

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

Но я хочу написать * p [2] в файл write (fd, p, size) не представляется возможным; – Angus

+1

'sizeof (p)' будет возвращать размер указателей '2'character, которые будут' 8'. Если вы хотите записать обе строки в файл, вы будете писать их в цикле. – Ganesh

+1

@Angus: Почему вы хотите написать * указатель * в файл? Это серьезная ошибка, потому что указатель бессмыслен для файла и будущих программ (включая эту программу). Какую книгу ты читаешь? – Sebivor

0

Проблемы здесь, как Кевин упомянул, что то, что у вас есть массив указателей ... поэтому для того, чтобы добиться того, чего вы хотите, вы должны тетср указателей над в другой массив. Это происходит потому, что (эти примеры значений чур :)

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

*q == 0xaaa 

так

q[0] = 0xaaa 

д [1] является нежелательной

Таким образом, вы не копируете массив, только одно значение:) Надеюсь, это поможет!

0

Я понимаю, что вы хотите сделать. Вы думаете, что используете «* q = * p;», чтобы назначить все указатели в p на q. Но знаете ли вы, что просто назначьте p [0] на q [0], p и q не являются указателями. Они всего лишь массив, вы не можете использовать этот синтаксис для копирования целого массива в другой, но вы можете использовать memcpy или назначать его элементы один за другим.

0

Если я понимаю, что вы пытаетесь выполнить правильно, объявите q как двойной указатель **q и назначьте его следующим образом: q = p.

Смежные вопросы