@forgoty

Почему gcc printf(%s, array) правильно выводит массив типа char, который не является NULL-terminated строкой?

#include <stdio.h>

int main() {
    char foo[6] = {"123456"};
    printf("%s", foo); // 123456
}


Почему gcc правильно выводит данный массив? Ведь спецификатор %s означает вывести на экран все символы массива, пока не встретит \0. Но он явно не задан. Я ожидал увидеть просто поток случайных байтов из памяти до тех пор, пока не встречу \0 где-нибудь.
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
rhaport
@rhaport
Повезло. Следующий адрес за массивом содержит ноль. Массив создаётся на стеке. Ваша простая программа стек на засоряет. Вполне вероятно, что следующий элемент просто 0. Посмотрите в дебаггере значение foo[6] или выведите на экран
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы