Ich schrieb diesen CodeWarum ändert dieser C-Code die Zeichenfolge nicht und verursacht einen Pufferüberlauf?
#include <stdio.h>
int main()
{
char String[] = "Hello the world!";
char *pointer = String;
int i;
printf(" %s\n", pointer);
pointer = "Helllooooo the worlldddddd";
printf("Hello %s\n", pointer);
printf("Hello %s\n", String);
return 0;
}
aber ich kann nicht verstehen, wie diese Linie gut funktioniert.
pointer = "Helllooooo the worlldddddd";
aber ich habe diese Ausgabe
Hello the world!
Hello Helllooooo the worlldddddd
Hello Hello the world!
Wie sehen Sie es nicht String
Wert ändern könnte, aber es zeigt mehr als die ursprüngliche Anzahl von Zeichen. Sollte dies nicht zu einem Pufferüberlauf führen? Wird das nicht andere Variablen zerstören?
'" Hallo die Welt! "' Und '" Helllooooo die worldddddd "' sind zwei verschiedene Strings, die sich in zwei verschiedenen Teilen des Speichers befinden. Mit 'pointer = ...' setzen Sie 'pointer' auf die Adresse einer dieser Zeichenketten (d. H. Setzen Sie sie so, dass sie auf diese Zeichenkette zeigt). –