Меня немного смущают следующие фрагменты кода C:
printf("Peter string is %d bytes\n", sizeof("Peter")); // Peter string is 6 bytes
Это говорит мне, что когда C компилирует строку в двойных кавычках, он автоматически добавит дополнительный байт для нулевого терминатора.
printf("Hello '%s'\n", "Peter");
Функция printf
знает, когда прекратить чтение строки "Питер", потому что она достигает нулевого терминатора, поэтому ...
char myString[2][9] = {"123456789", "123456789" };
printf("myString: %s\n", myString[0]);
Здесь printf
печатает все 18 символов, потому что нет нулевых терминаторов (и они не подойдут, если не взять 9). Разве C не добавляет нулевой терминатор в определение переменной?