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 );
    

    🙂


Anmelden zum Antworten