Строки, представленные в виде символьных массивов, должны заканчиваться нулем.Это включает в себя ваши abc
и pass
массивы.printf
ничего не знает о размере вашего массива, когда ему передается abc
.Он просто печатает символы, начинающиеся с этого адреса, пока не достигнет значения \0
.То же самое для pass
Если abc
печатал правильно без добавления нулевого символа, то это, вероятно, просто повезло.Это технически неопределенное поведение.
Давайте исправим ваш код ....
int main(void)
{
char abc[52+1]; // 53
for (int i = 0; i < 52; i++)
{
if (i < 26)
{
abc[i] = 'a' + i;
}
else
{
abc[i] = 'A' + i - 26;
}
}
abc[52] = '\0';
printf("%s\n", abc);
char pass[2+1]; //3
pass[0] = abc[3];
pass[1] = '\0'; // null terminate pass before printing
printf("%s\n", pass);
pass[1] = abc[1];
pass[2] = '\0'; // null terminate pass again before printing
printf("%s\n", pass);
}