sizeof
и strlen()
делают разные вещи. В этом случае ваша декларация
char string[] = "october";
совпадает с
char string[8] = "october";
чтобы компилятор мог определить, что размер string
равен 8. Он делает это во время компиляции.
Однако strlen()
подсчитывает количество символов в строке во время выполнения. Итак, после вызова strcpy()
, string
теперь содержит «сентябрь». strlen()
считает символы и находит 9 из них. Обратите внимание, что вы не выделили достаточно места для string
, чтобы провести «сентябрь». Это неопределенное поведение.