Строки в C заканчиваются нулями на '\0'
."abc"
на самом деле { 'a', 'b', 'c', '\0' }
, что составляет 4 char
с.В вашем массиве a
есть место только для 3 char
с, поэтому '\0'
не сохраняется.Когда printf()
пытается распечатать строку, хранящуюся в a
, он читает и печатает один символ за раз, пока не встретит завершающий '\0'
, но его нет.Так что он продолжает читать и печатать.И бывает, что b
находится прямо рядом с a
в памяти, поэтому содержимое b
также получает отпечаток.
Cure:
#include <stdio.h>
int main(void)
{
char a[4] = "abc";
char b[4] = "efg";
printf("%s", a);
}
или, что еще лучше, не указывайте размер для массивов вообще.Пусть компилятор определит правильный размер на основе инициализатора "abc"
:
#include <stdio.h>
int main(void)
{
char a[] = "abc";
char b[] = "efg";
printf("%s", a);
}