Я знаю, что в C, \0
завершает строку.Мы можем назначить как строки, так и массив символов для массива символов?
char c1[] = "hello";
char c2[] = {'h','e','l','l','o'};
Однако я понимаю, что массив символов не имеет \0
в качестве завершающего символа:
printf("%d\n",sizeof(c1)); //6
printf("%d\n",sizeof(c2)); //5
Однако когдаЯ печатаю их и вижу что-то вроде этого:
printf("%s\n",c1); //hello
printf("%s\n",c2); //helloV
Q1.Если я перезапущу его, во второй строке иногда выводится helloU
, иногда - helloV
.Почему это так?
Q2.Также, как это нормально, что массив символов может содержать \0
завершающую строку, а не \0
завершающий массив символов?
Q3.Я знаю, что printf
завершается, когда встречается \0
.Как ведет себя printf
, когда не встречается \0
?
Код