C многомерный массив строк

#c #string #multidimensional-array

#c #строка #многомерный массив

Вопрос:

Я объявляю массив строк очень просто, жестко запрограммированный, но он продолжает выдавать мне array type has incomplete element type ошибку.

Я предполагаю, что это как-то связано с длиной каждого массива, но я не знаю, как это исправить, не устанавливая фиксированную длину для строк.

 char allocate[][2][] = {  // Error with or without the 2
    {"value1","value2"},
    {"value3","value4"}
};
  

Ответ №1:

Этот синтаксис недопустим. Если вы хотите получить настоящий многомерный массив, должны быть указаны все измерения, кроме первого. (Компилятор должен знать, насколько велики «внутренние» массивы, чтобы выполнить вычисление адресов для внешних измерений.)

Попробуйте это вместо:

 const char *allocate[][2] = {
    {"value1","value2"},
    {"value3","value4"}
};
  

Он объявляет двумерный массив const char * .

Обратите внимание, что если вам нужны строки, в которые вы можете записывать, то описанный выше подход не будет работать.

Комментарии:

1. Итак, этот массив содержит указатели на строки (которые затем хранятся вне массива?) Разве вы не смогли бы выполнять запись в строки, если бы удалили const ключевое слово?

2. @Jv: Нет, это неопределенное поведение (хотя обычно вы получите ошибку seg). Строковые литералы доступны только для чтения, и на них действительно всегда следует указывать с помощью const char * . Единственная причина, по которой C позволяет вам использовать a char * , заключается в некоторых проблемах с обратной совместимостью.