Ваша программа имеет неопределенное поведение.
Ваш массив b
содержит { '1', '2' }
.Как вы говорите, в массиве нет нулевого символа - это означает, что он не содержит строку.
strcpy
Второй аргумент должен быть указателем на строку,Вы дали ему значение char*
, которое не является указателем на строку.
На практике strcpy
, вероятно, продолжит копирование символов из памяти после b
.Эта память содержит произвольный мусор - и даже попытка доступа к нему имеет неопределенное поведение.
В некотором смысле вам повезло, что вы получили вывод, который является явно мусором.Если в памяти сразу за вашим массивом был нулевой символ, и если ваша программа не взорвалась, пытаясь получить к нему доступ, она могла бы просто напечатать 12
, и вы могли не знать, что ваша программа содержит ошибки.
Если вы хотите исправить свою программу, вы можете изменить
char b[2] = "12";
на
char b[] = "12";
Компилятор определит, насколько большим должен быть b
для хранения строки (включая требуемый завершающий нулевой символ).