Присвоение символа *c[] двойному указателю в структуре

#c #pointers #struct

#c #указатели #структура

Вопрос:

У меня есть такая структура:

 typedef struct stringd{
char **x;
}s;
  

и двумерный массив символов, объявленный как

 char *c[32];
  

Я заполняю массив символов внутри цикла и в конце передаю его структурам. Каков был бы правильный способ сделать это?

 s->x = amp;c; 
or 
s->x = c;
  

оба, похоже, не работают.

Комментарии:

1. Что такое c ? Он нигде не объявлен

2. Моя ошибка. это была опечатка. Исправлено сейчас!

3. Двойной указатель — это указатель на double 🙂

Ответ №1:

c представляет собой массив из 32 указателей на char, то есть типа char *[32] , и, как любой массив, он может автоматически и тривиально распадаться на указатель на первый элемент массива, который имеет тип char ** . Похоже, это то, что вам нужно.

amp;c , однако имеет тип указатель на массив из 32 указателей на char, то есть, char *(*)[32] , и вам это не нужно!

Похоже, ваша проблема связана с s и маленькой стрелкой. Попробуйте:

 s.x = c;
  

Кстати, говорить «не работает» не так полезно, как копировать фактические сообщения об ошибках…

Ответ №2:

 s *t;
t->x = c;
  

Работает для меня. Почему именно это не работает? Что это за сообщение об ошибке? Может быть, вы перепутали typedef s , что такое тип и переменная s ?