#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;
}
Salida:Sizeof vs STRLEN
el tamaño de septiembre es 8 y la longitud es de 9
¿Hay algo malo con mi sintaxis o qué?
Estás escribiendo más allá del final de la matriz 'string'. Este es un comportamiento indefinido. 'string' solo puede contener 8 caracteres (7 para" octubre "y 1 para el terminador nulo). Cuando llama a 'strcpy', le está escribiendo 10 caracteres (9 para" septiembre "y 1 para el terminador nulo), lo que significa que ha pasado el final de la matriz y está sobrescribiendo la memoria adyacente. – Marlon
Tenga en cuenta que 'sizeof' se calcula en * compile * time donde' strlen' es el tiempo de ejecución. – Naveen
@Naveen: Tenga en cuenta que eso no es necesariamente cierto cuando se trata de VLA. – caf