символ слова [] против символа слова [5] - PullRequest
0 голосов
/ 04 октября 2018

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

int main (void){

    char word_0[] = "Hola que tal\n";

    printf("%s", word_0); 

    char word_1[20] = "Hola que tal\n";

    printf("%s", word_1);

    return 0;
}

Я знаю, что я "тратить "память в word_1, так как я спрашиваю больше места (размер = 20), чем мне нужно, но что происходит с word_0 (размер =?)?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Когда массив объявляется без указания размера, но с инициализатором, C выбирает размер, достаточно большой, чтобы вместить все элементы, указанные инициализатором.В случае вашего

    char word_0[] = "Hola que tal\n";

, то есть 14 символов (включая один для ограничителя строки).

0 голосов
/ 04 октября 2018

Чтобы объединить ответы @Ben и @JohnBollinger,

Оператор char_word[] = "Hola que tal\n" указывает компилятору, что размер массива будет инициализирован на основе строкового литерала или "Hola que tal\n".

Таким образом, в этом случае компилятор сказал бы, что объявление char_word[] эквивалентно char_word[14].

0 голосов
/ 04 октября 2018

Компилятор выбирает размер автоматически.

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