Я сейчас читаю книгу «Изучите С» и натолкнулся на вопрос, которого я действительно не понимаю. Задача упражнения - найти проблему с помощью этого кода:
char c;
c = 'a';
printf("c holds the character %c.",c);
.. а затем он дает объяснение, что: «Текстовая строка« a »состоит из двух символов, и« a », и завершающего нулевого байта. Переменная c имеет размер только один байт. Даже если c Если длина была 2 байта, вы не можете скопировать текстовую строку таким образом. Попробуйте скопировать текст по одному байту за раз в переменную, достаточно большую, чтобы содержать текстовую строку и ее завершающий нулевой байт. "
Однако, когда я запускаю приведенный выше код - он прекрасно работает. Мне показалось, что я понял теорию, объясняющую, почему это плохо - все завершается 0 в конце строки, поэтому я переписал код, подобный этому, чтобы проверить:
char c[2];
*c = 'a';
printf("c holds the character %c.",c);
Но это порождает проблему. Я начинаю путаться в отношении проблемы. Разве этот 2-й набор кода не передаст букву «a» указателю в c [0], а затем поместит завершающий 0 в c [1] - полностью используя 2 пробела, выделенных для этого массива?