создание двумерного массива с фиксированным числом строк в C - PullRequest
0 голосов
/ 12 марта 2012

Я хотел создать массив двумерных строк, который имел бы размеры "string [5] [*]", но у меня возникли некоторые проблемы.Я хотел бы сделать что-то вроде этого:

...
for(i = 0;i < 5;i++){
    char* word = ...;
    if(strcmp(word,...)){
        string[i][j] = (char *) malloc(/*size of word*/);
        string[i][j] = word;
        j++;
    }
}

Переменная «string» должна иметь длину 5 в i-м направлении и должна иметь возможность расти столько, сколько мне нужно в j-м направлении.

Я пытался сделать:

char* string[5];

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

РЕДАКТИРОВАТЬ: я пытаюсь отсортировать список строк по 5 категориям.Таким образом, n-мерный массив должен в некотором смысле содержать 5 массивов, содержащих неопределенное количество строк (не символы).Я предполагаю, что это трехмерный массив символов, но мне было трудно думать, как его написать.Я хочу, чтобы каждая строка [i] [j] содержала массив символов.Таким образом, строка [0] [0] может быть равна "кошка" или что-то.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Попробуйте это.

char **string;
string = (char **)(malloc(sizeof(char *) * 5));
//malloc the string[i] whenever you need to at what ever size is necessary.

Также в вашем коде вверху проблема в том, что каждый string[i][j] является char, и вы не можете использовать malloc для не указателя. Каждый string[i] - это char *, для этого вам нужно malloc.

1 голос
/ 12 марта 2012

Эта строка

string[i][j] = ...

будет дважды разыменовывать char**, что означает, что вы присваиваете что-то char. Если это что-то окажется указателем, компилятор не допустит этого.

Вместо этого, я думаю, вы хотите:

string[i] = (char*) malloc(...);

И тогда ваше определение 2D-массива остается таким же, как вы его пробовали:

char* string[5];

Возможно, вы уже знаете это, но я добавлю несколько других заметок на всякий случай. C строки обычно не могут быть назначены с помощью =. Вместо этого вам нужно:

strcpy(string[i], word);

Во-вторых, malloc() не должно быть strlen(word), а скорее:

strlen(word) + 1

Дополнительный байт для нулевого терминатора.

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