Предположим, что у меня есть следующие c char массивы:
char okaysize4[5] = "four"; // line 5
char toosmall4[4] = "four"; // line 6
char toosmall3[3] = "four"; // line 7
Когда я компилирую с gcc 4.4.7, я получаю следующую ошибку:
array.c: 7: предупреждение: строка инициализации для массива символов слишком длинная
Эта ошибка ожидается для строки 7, так как я пытаюсь записать 5 символов ("four" + \0)
в массив из 3 элементов.
Также не ожидается ошибка для строки 5, поскольку массив 5 элементов достаточно велик.
Однако я удивлен, что подобная ошибка для строки 6 не возникает. Что заканчивается тем, что инициализируется в toosmall4
, является неисчерпаемой строкой, которая может вызвать всевозможные проблемы.
Я понимаю, что строковый литерал c "four"
должен содержать пять символов, из-за нулевого терминатора. Фактически sizeof("four")
равно 5. Итак, почему компилятор здесь не дает ошибку?
Есть ли способ изменить мою декларацию/определение/инициализацию, чтобы в этом случае была отмечена ошибка?