#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
?