C Объявление массива символа*

Не заключайте мне в кавычки на этом, но консоль API Win32 могла бы быть тем, что Вы ищете. Если Вы просто делаете это для отладки целей, однако, Вы могли бы больше интересоваться выполнением DebugView и вызов функция DbgPrint.

Это, конечно, принимает его Ваше заявление, которое Вы хотите послать консольному выводу, не читая его из другого приложения. В этом случае каналы могли бы быть Вашим другом.

9
задан 11 July 2009 в 05:40
поделиться

5 ответов

Нет, вы можете инициализировать массив только при первом его объявлении. Причина в том, что массивы не являются изменяемыми lvalue.

В вашем случае:

char *array[] = {"blah", "blah", "blah"};

Вам не нужно указывать размер, но вы можете, если хотите. Однако в этом случае размер не может быть меньше 3. Кроме того, три строки записываются в постоянную память, поэтому что-то вроде array [1] [2] = 'c' , чтобы изменить второе «blah» на «blch»

20
ответ дан 4 December 2019 в 08:52
поделиться

Это выражение инициализатора. Этот код не может быть между ними, его нужно использовать в строке с объявлением.

0
ответ дан 4 December 2019 в 08:52
поделиться

Да, вы можете объявить массив, а затем инициализировать его.
Однако здесь есть исключение.
Вы объявляете массив символьных указателей (который работал нормально).
И затем вы создаете экземпляры константных строк, чтобы назначить их массиву .

Вот где начинается проблема.
Постоянные строки - это просто примитивы компилятора, которые не получают адресуемой области памяти в том виде, как вы их использовали. Их можно назначить прямо во время инициализации массива (как показал Майк ); который проинструктирует компилятор выделить их как константы, доступные во время выполнения, и разрешить инициализацию при запуске области myArray .


То, что вы пробовали, хорошо работало бы с

int numberArray[3];
// code here
numberArray[0] = 1;
numberArray[1] = 2;
numberArray[2] = 3;

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

1
ответ дан 4 December 2019 в 08:52
поделиться

Вы ошиблись. Инициализация возможна только в объявлении . После этого вы можете назначать только отдельные значения.

0
ответ дан 4 December 2019 в 08:52
поделиться

Как уже говорили другие, вы можете использовать инициализаторы только при объявлении переменной. Ближайший способ сделать то, что вы хотите:

char *myArray[3];

/* CODE INBETWEEN */

{
    static const char *tmp[3] = {
            "blah",
            "blah",
            "blah" };
    memcpy(myArray, tmp, sizeof myArray);
}
3
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: