inkrement/dekrement von strings?
-
hey, hab in meinem buch kein beispiel dafür gefunden.
kann mir jemand erklären, was genau da passiert?
ich hätte eher damit gerechnet, dass er "iallo" ausgibt, weil ja string irgendwie nur n pointer auf das erste zeichen sind. Aber:char *a = "hallo"; printf("%s\n",++a);
ausgabe:
allo
der code ist ja scheinbar absolut korrekt, da nicht mal ne warning ausgegeben wird.
was passiert da im compiler?
-
char *a = "hallo"; // der zeiger a zeigt auf den anfang der zeichenkette, also auf 'h'
++a; // der zeiger zeigt ein byte weiter, auf 'a'
darum wird allo ausgegeben.ein "iallo" kann man in dem fall hier gar nicht erreichen, weil die zeichenkette konstant ( read only ) ist.
-
hi!
du kannst zeichenketten verändern, wenn du für sie einen beschreibbaren puffer spendierst.
z.b. mit char puffer[10] = "hallo";
oder char buf[] = "echo";char b[] = "hallo"; char *a = &b; // index-schreibweise a[0]++; printf("%s\n", b ); a[1]++; printf("%s\n", b ); a[2]++; printf("%s\n", b ); a[3]++; printf("%s\n", b ); a[4]++; printf("%s\n", b );
oder krass mit zeigerschreibweise:
puts("*************************"); strcpy(b,"hallo"); ++(*a); printf("%s\n", b ); ++(*(a+1)); printf("%s\n", b ); ++(*(a+2)); printf("%s\n", b ); ++(*(a+3)); printf("%s\n", b ); ++(*(a+4)); printf("%s\n", b );