объявить массив указателей в заголовочном файле C и присвоить значение? - PullRequest
0 голосов
/ 02 июня 2011

Можно ли объявить массив указателей, а затем инициализировать любой из них и присвоить значение в заголовочном файле C?

char *i[2];  
i[0] = "abc";

следующее не работает.

char *x = "def"; // this will, of course.

Как мне объявить и присвоить значения для массива указателей?

Ответы [ 4 ]

2 голосов
/ 02 июня 2011

Это не имеет ничего общего с заголовочными файлами.Вы не можете создать файл .c и вставить в него код, подобный следующему:

char *i[2];  
i[0] = "abc";

В C весь код, кроме определений и инициализаций, должен быть внутри функций, и ваш второй оператор не является ни одним из них - этоприсваивание.

Инициализация для вашего массива будет выглядеть следующим образом:

char *i[2] = {"foo","bar"};

И это может быть помещено в файл заголовка, но приведет к множественным ошибкам определения, если заголовок будет использован вчем одна единица перевода.

0 голосов
/ 02 июня 2011

Вы уверены, что ваш код

char *i[2];  
i[0] = "abc";

не работает ??не могли бы вы опубликовать ошибки?

Я пробовал это в gcc и vc ++, и это прекрасно работает.

Вы также можете пройти учебник по этой ссылке: http://ee.hawaii.edu/~tep/EE160/Book/chap9/section2.1.4.html

Выдержки:

char * nameptr [MAX];

Массив nameptr [] является массивом размера MAX, а каждый элемент массива является символьным указателем.Затем можно присвоить значения указателя символов элементам массива;например:

nameptr [i] = "Джон Смит";

Строка "Джон Смит" помещается компилятором где-то в памяти, а затем указатель на строковую константу присваиваетсяnameptr [i].

0 голосов
/ 02 июня 2011

Это то, что вы ищете?

char *i[2] = {"abc", "def"};

Хотя вы получите предупреждение, если вы их не сделаете const char *

const char *i[2] = {"abc", "def"};
0 голосов
/ 02 июня 2011

Это технически возможно.Но вы должны никогда объявлять переменные в заголовочных файлах.Сделайте это с .c файлами.

Кроме того, вы должны инициализировать char * векторов примерно так:

...