#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;
}
Ausgang:Sizeof vs Strlen
die Größe September ist 8 und die Länge beträgt 9
Gibt es etwas falsch mit meiner Syntax, oder was?
Sie schreiben über das Ende des Feldes 'string'. Dies ist ein nicht definiertes Verhalten. 'string' kann nur 8 Zeichen enthalten (7 für" oktober "und 1 für den Nullabschluss). Wenn Sie 'strcpy' aufrufen, schreiben Sie 10 Zeichen (9 für" September "und 1 für den Nullabschluss), was bedeutet, dass Sie über das Ende des Arrays hinausgegangen sind und den angrenzenden Speicher überschreiben. – Marlon
Beachten Sie, dass 'sizeof' zu * compile * Zeit berechnet wird, während 'strlen' Laufzeit ist. – Naveen
@Naveen: Seien Sie sich bewusst, dass das nicht unbedingt stimmt, wo VLAs beteiligt sind. – caf