Das Problem liegt darin, dass im zweiten Beispiel, wenn Sie abc = (char*)"Test1234";
zuweisen, Sie nur den Zeiger abc
lokal in der Funktion test()
ändern, was den Wert des Zeigers xyz
in der Hauptfunktion nicht verändert. Im Gegensatz dazu kopieren Sie mit strcpy(abc, abcde);
den Inhalt der Zeichenkette abcde
in den Speicherbereich, auf den abc
zeigt, was den Inhalt des Speichers, auf den xyz
zeigt, ändert und diese Änderung nach der Rückkehr aus der Funktion bestehen bleibt.
➜ Die Zuweisung eines Zeigers (abc = (char*)"Test1234";
) ändert nur die lokale Kopie des Zeigers.
➜ strcpy()
ändert den Inhalt des Speichers, auf den der Zeiger zeigt, was eine bleibende Wirkung im Hauptprogramm hat.