массив строк в структуре в C - PullRequest
2 голосов
/ 01 марта 2012

Скажем, у нас есть

typedef struct{
    char* ename;
    char** pname;
}Ext;

Ext ext[5];

Я пытаюсь заполнить данные следующим образом:

ext[0].ename="XXXX";
ext[0].pname={"A", "B", "C"};  // and so on for the rest of the array

- я почти уверен, что это не правильноспособ сделать это, потому что я получаю ошибки.Пожалуйста, дайте мне знать правильный способ сделать это.Спасибо.

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Первое назначение правильное.

Второе - нет.Вам необходимо динамически выделить массив:

ext[0].pname = malloc( sizeof(char*) * 5 );
ext[0].pname[0] = "A";
ext[0].pname[1] = "B";
//and so on
//you can use a loop for this
1 голос
/ 01 марта 2012

Вы не упоминаете, какой компилятор вы используете. Если он совместим с C99, то должно работать следующее:

   const char *a[] = {"A", "B", "C"}; // no cast needed here
   const char **b;
   void foo(void) {
       b = (const char *[]){"A", "B", "C"}; // cast needed
   }

Ваши массивы, находящиеся в структуре typedef'd, здесь не имеют значения.

...