Посмотрите на следующий код:Почему спецификатор формата «% s» работает даже для массива символов без ` 0` и распечатывает все его элементы сразу?
#include<stdio.h>
int main(void)
{
char name[7]={'E','R','I','C'};
printf("%s",name);
}
Он выводит все name
ERIC .Why это так не %s
должен работать только тогда, когда мы инициализируем массив символов name
следующим образом:
char name[7]={'E','R','I','C','\0'}; //With NULL terminator
Я не принимая во внимание следующее, как это, очевидно, предполагает символьный массив с завершающим нулем:
char name[7]="ERIC"
Почему H2CO3 удалил свой ответ? В любом случае, вы хотите сказать ясным и однозначным словам на основе стандарта, что он безопасен, если размер массива не менее ** на 1 больше, чем предполагаемый количество символов, которые мы хотим инициализировать? –
Кажется, что Тайвань догоняет Венгрию ... LOL ... (H2CO3 - венгерский) –
@ Rüppell'sVulture Я удалил свой ответ, потому что это было неправильно :) Кажется, страшно, что авторитет имеет ** этот эффект ** на голосование - «только потому, что у него есть 69 тыс. репутации, он должен быть прав», и у меня есть три upvotes для неправильного ответа ...>. < – 2013-05-05 08:21:08