Другие языки программирования и технологии

как павельно обявить двухмерныи масив в си?

нужно создать двухмерныи масив с неким текстам. Я делаю так:
char ***mas = {
(char **){"aa_test00", "v_test01"},
(char **){"eee_test10", "qqqq_test11}
};

компилятор зоворит: warning: excess elements in scalar initializer [enabled by default]
и warning: (near initialization for ‘errors’) [enabled by default]

Кто может обяснить, в чем проблема и как решыть?
Ростислав .
Ростислав .
2 486
** - это указатель на указатель.
После этого массив надо еще создать в памяти.
Ит только после этого можно будет заполнять его.
СC
Семен Cлужбин
63 202
Лучший ответ
Ростислав . А есть способ обявить масив (двухмерныи) с текстам и иницыализировать, но при этом не использовать никаких размеров?
Простейшее решение для массива n*m строк длиной k:
char s[n][m][k];
n,m,k могут вводиться с клавиатуры, а могут и задаваться прямо в программе. Но это именно в С, не в C++ :)
Марс Ибрагим
Марс Ибрагим
56 462
Для начала - в C нет двумерных массивов. Есть массивы массивов, массивы указателей, указатели на указатели и т. д. Можно выделить фрагмент памяти и поставить указатель на его начало, тогда указатель "работает" как массив.
Затем - в C нет строк. Есть массивы символов (и, соответственно, указатели на них). Таким образом, тебе нужен уже не двумерный, а трехмерный массив, отсюда три звездочки.
Если массив задан с самого начала, то простейшим решением будет
char mas[][2][20] = {
{"aa_test00", "v_test01"},
{"eee_test10", "qqqq_test11}};
Только это не char ***, а char [][2][20] - первая скобка не заполнена, т. к. для компиляции не обязательно знать, сколько строк будет в массиве (адрес n-ой строки можно вычислить, а существует ли она - ответственность программиста).
LO
Leon One
97 297
Двухмерный массив вот - a[10][10]={{1,2,3},{1,2,3}};
А вам, на сколько я понял, нужна обычная структура (с которой потом можно взять адрес):
struct STRING_TABLE{
char *Str;
} StrT[10] = {"String1", "String2"};

З. Ы.: Указатель на указатель в программе обычно вводят применительно к аргументам функции, сам по себе он бесполезен. И не зачем морочить себе голову.
Salamat ...
Salamat ...
26 548
Leon One Про указатели - бред написан. K&R читали?
#include < string.h >

string mass[10][10] ;

mass[0][0] = "aa_test00";
mass[0][1] = "v_test01";
Дмитрий Шмелёв
Дмитрий Шмелёв
15 388
//Например так:
char **p[2][2]={
{"Hello","People"},
{"111","222"}
};
//В Вашей программе создается указатель на указатель на указатель (***)
//В свою очередь, выделения памяти по этому указателю не происходит.
//Также можно динамически выделить память под данные указатели
//И потом произвести присвоение
Дмитрий Р.
Дмитрий Р.
1 291