#include "stdio.h"
#include "string.h"
main()
{
char string[] = "october"; // october is 7 letters
strcpy(string, "september"); // september is 9 letters
printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string));
return 0;
}
Выход:Sizeof против STRLEN
размер сентября составляет 8, а длина 9
Есть ли что-то не так с моим синтаксисом или что?
Вы пишете конец конца строки 'string'. Это неопределенное поведение. 'string' может содержать только 8 символов (7 для« октябрь »и 1 для нулевого терминатора). Когда вы вызываете 'strcpy', вы пишете ему 10 символов (9 для« september »и 1 для нулевого терминатора), что означает, что вы прошли мимо конца массива и перезаписываете смежную память. – Marlon
Обратите внимание, что 'sizeof' вычисляется при * компиляции * времени, где в качестве' strlen' используется время выполнения. – Naveen
@Naveen: Имейте в виду, что это не обязательно так, когда задействованы VLA. – caf