Итак, я попытался создать массивы символов и поиграться с ним.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv) {
char str1[11] = "Yo! Angelo!~"; //total length of 12, initializer is shorter
char str2[14] = "Yo! Angelo!233"; //total length of 14, initializer is same length
char str3[60] = "Yo! Angelo!wwww"; //initializer is longer
printf("%s"\n, str1);
}
компилятор предупреждает меня, что initializer-string for array of chars is too long
Я ожидал, что он даст мне только первые 11 символов str1, то есть Yo! Angelo!
без '~'
, но это все три массива в строке (первый - первые 11 символов), как это
Yo! Angelo!Yo! Angelo!233Yo! Angelo!wwww
(все три строки разбиты без пробела)
та же проблема все еще существует, когда я изменил инициализатор на длину 12 (такая же длина, что и строка)
также, когда я пытаюсь printf("%s\n", str2)
, у него аналогичная проблема - он печатает вторую и третью строку в одну строку без каких-либо значений между
, но когда я изменяю его на 13 или более, он печатает только str1, как и предполагалось.
Это не экстренный случай, и я знаю, что строка должна быть объявлена длиннее, чем ее длина (в данном случае больше 13), но мне просто интересно, почему printf делает такие смешные вещи.
Спасибо ~