нужно создать двухмерныи масив с неким текстам. Я делаю так:
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]
Кто может обяснить, в чем проблема и как решыть?
Другие языки программирования и технологии
как павельно обявить двухмерныи масив в си?
** - это указатель на указатель.
После этого массив надо еще создать в памяти.
Ит только после этого можно будет заполнять его.
После этого массив надо еще создать в памяти.
Ит только после этого можно будет заполнять его.
Ростислав .
А есть способ обявить масив (двухмерныи) с текстам и иницыализировать, но при этом не использовать никаких размеров?
Простейшее решение для массива n*m строк длиной k:
char s[n][m][k];
n,m,k могут вводиться с клавиатуры, а могут и задаваться прямо в программе. Но это именно в С, не в C++ :)
char s[n][m][k];
n,m,k могут вводиться с клавиатуры, а могут и задаваться прямо в программе. Но это именно в С, не в C++ :)
Для начала - в C нет двумерных массивов. Есть массивы массивов, массивы указателей, указатели на указатели и т. д. Можно выделить фрагмент памяти и поставить указатель на его начало, тогда указатель "работает" как массив.
Затем - в C нет строк. Есть массивы символов (и, соответственно, указатели на них). Таким образом, тебе нужен уже не двумерный, а трехмерный массив, отсюда три звездочки.
Если массив задан с самого начала, то простейшим решением будет
char mas[][2][20] = {
{"aa_test00", "v_test01"},
{"eee_test10", "qqqq_test11}};
Только это не char ***, а char [][2][20] - первая скобка не заполнена, т. к. для компиляции не обязательно знать, сколько строк будет в массиве (адрес n-ой строки можно вычислить, а существует ли она - ответственность программиста).
Затем - в C нет строк. Есть массивы символов (и, соответственно, указатели на них). Таким образом, тебе нужен уже не двумерный, а трехмерный массив, отсюда три звездочки.
Если массив задан с самого начала, то простейшим решением будет
char mas[][2][20] = {
{"aa_test00", "v_test01"},
{"eee_test10", "qqqq_test11}};
Только это не char ***, а char [][2][20] - первая скобка не заполнена, т. к. для компиляции не обязательно знать, сколько строк будет в массиве (адрес n-ой строки можно вычислить, а существует ли она - ответственность программиста).
Двухмерный массив вот - a[10][10]={{1,2,3},{1,2,3}};
А вам, на сколько я понял, нужна обычная структура (с которой потом можно взять адрес):
struct STRING_TABLE{
char *Str;
} StrT[10] = {"String1", "String2"};
З. Ы.: Указатель на указатель в программе обычно вводят применительно к аргументам функции, сам по себе он бесполезен. И не зачем морочить себе голову.
А вам, на сколько я понял, нужна обычная структура (с которой потом можно взять адрес):
struct STRING_TABLE{
char *Str;
} StrT[10] = {"String1", "String2"};
З. Ы.: Указатель на указатель в программе обычно вводят применительно к аргументам функции, сам по себе он бесполезен. И не зачем морочить себе голову.
Leon One
Про указатели - бред написан. K&R читали?
#include < string.h >
string mass[10][10] ;
mass[0][0] = "aa_test00";
mass[0][1] = "v_test01";
string mass[10][10] ;
mass[0][0] = "aa_test00";
mass[0][1] = "v_test01";
//Например так:
char **p[2][2]={
{"Hello","People"},
{"111","222"}
};
//В Вашей программе создается указатель на указатель на указатель (***)
//В свою очередь, выделения памяти по этому указателю не происходит.
//Также можно динамически выделить память под данные указатели
//И потом произвести присвоение
char **p[2][2]={
{"Hello","People"},
{"111","222"}
};
//В Вашей программе создается указатель на указатель на указатель (***)
//В свою очередь, выделения памяти по этому указателю не происходит.
//Также можно динамически выделить память под данные указатели
//И потом произвести присвоение
Похожие вопросы
- С Указатели двухмерный масив
- масивы. может ли реальное количество элеентов в масиве быть меньше, чем указано при описании? больше? почему?
- Помогите с одномерным масивом. Программа нужна на С или C++.
- суму елементів масиву з парними індексами та добуток елементів з непарними індексами. Масив вводиться з клавіатури c++
- Разница между Си и Си++
- Как из си++ сделать си?)... подробнее
- Какие преимущества сохранил Ассемблер к Си?
- Си или Си шарп (С#)???
- помоги с СИ++..
- Какой СИ. Какой СИ лучше? си плюс плюс или си шарп? что стоит учить в первую очередь?