C "Универсальный" Struct build - PullRequest
       0

C "Универсальный" Struct build

0 голосов
/ 29 августа 2011

Я хочу построить структуру, которая имеет массив с неизвестным количеством строк и 2 столбцами, что-то вроде

struct s
{
     cinst char*** s;
}
const char* str1[][2] = {"1","2",
                        "3","4",
                        "5","6"};
s s1 = {str1};
const char* str2[][2] = {"1","2",
                        "3","4"};

s s2 = {str2};

Код не работает при компиляции. Как я могу решить проблему?

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Помимо опечатки cinst и пропущенной точки с запятой и допущения (не сообщая нам об этом) s и struct s относятся к одному и тому же типу

, ваша проблема в том, что типы str1 ичлен структуры s не совместим

  • str1 имеет тип const char*[][2]
  • член структуры имеет тип const char***

Принудительное принятие компилятором str1 типа const char *** решает вашу непосредственную проблему, т. Е. Программа компилируется и «работает», но вам действительно нужно понимать, что массивы не являются указателями и указатели не являются массивами .См. Раздел 6 сайта c-faq .

struct s
{
     const char*** s;
};
const char* str1[][2] = {"1","2",
                        "3","4",
                        "5","6"};
struct s s1 = {(const char ***)str1};
const char* str2[][2] = {"1","2",
                        "3","4"};

struct s s2 = {(const char ***)str2};
0 голосов
/ 29 августа 2011
struct s
{
    cinst char** s;
};
const char str1[][2] = {"1","2",
                "3","4",
                "5","6"};
s s1 = {str1};
const char str2[][2] = {"1","2",
                "3","4"};

s s2 = {str2};

Устранение третьей косвенности / разыменования исправит это.

0 голосов
/ 29 августа 2011

Ну, это не C. (и точка с запятой отсутствует)

struct s {...};не вводит тип "s", это , а не typedef.например, вы не можете использовать: struct s {...};s my_thing;(даже если вы добавите пропущенную точку с запятой) Может, вы путаете C и C ++?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...