Gemäß dem C Standard (6.4.5 String Literale)
7 Es ist nicht spezifiziert, ob diese unterschiedlichen Anordnungen vorgesehen ihre Elemente haben die entsprechenden Werte sind. Wenn das Programm versucht, ein solches Array mit zu modifizieren, ist das Verhalten nicht definiert.
Sie erklärten zwei Zeiger auf Stringliterale
char *a;
a = "aabtyn";
char *b;
b = "mihli";
Dann in dieser Aussage
strcpy(a,b);
Sie versuchen, wörtliche die erste Zeichenfolge zu ändern. Also ist das Verhalten des Programms undefiniert.
Wie für diese Aussage
strcpy(&a,&b);
dann wird versucht, den Wert eines Zeigers auf einen anderen Zeiger zu kopieren. Dieser Aufruf hat auch undefiniertes Verhalten. Aber wenn der Wert des zweiten Zeigers ist nullterminierte dann kann dieser Aufruf zu
a = b;
entspricht also der erste Zeiger gerade neu zugewiesen. In jedem Fall gibt es jedoch undefiniertes Verhalten.
Ein gültiges Programm die folgende Art und Weise aussehen kann
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[] = "aabtyn";
char *a = s;
char *b;
b = "mihli";
strcpy(a,b);
printf("%s-%s\n",a,b);
return 0;
}
es funktioniert nicht mit 'strcpy (&a,&b);' –
Obwohl die zugrunde liegende Ursache des doppelten Problem ist das gleiche, das Problem, wie die OP zu sehen ist, sieht anders aus, weil das Schreiben in "strcpy" verpackt ist. Ich stimme dafür, diese Frage erneut zu öffnen. – dasblinkenlight