Zeigerarithmetik (Offsetaddition an Funktionsparameter)
-
Hallo,
angestoßen durch einen anderen Thread hab ich ne Grundlegende Frage.
Warum arbeitet folgende Funktion nicht wie ich es erwarte ?
void foo(char *ptr){ short offset=5; //nur als Bsp.: ptr+=offset; return; } void Bar(void){ char text[]="Das ist nen Test"; foo(text); printf("%s\n",text); }
Ich erwarte dass die Ausgabe nicht "Das ist nen Test" ausgibt, sondern
"st nen Test". Das ist aber nicht der Fall. Es wird "Das ist nen Test" ausgegeben. Warum ? Hab ich da was grundlegendes nicht verstanden ?
-
mal davon abgesehen das ich mir fast sicher bin das du text gar nicht verschieben darfst (ist ja quasi ein pointer auf nen konstanten bereich...)
würde das auch nicht funktionieren wenn du nen anderen pointer genommen hättest weil du ja innerhalb der funktion nicht mit dem pointer arbeitest sondern nur mit ner kopie(die danach wieder vom stack geräumt wird)...probier mal so
void foo(char **ptr){ short offset=5; //nur als Bsp.: *ptr+=offset; return; } void Bar(void){ char text[]="Das ist nen Test"; char *p=text; foo(&p); printf("%s\n",p); } int main(){ Bar(); }
-
Hallo,
es war kein akutes Problem. Aber du hast die Antwort schon gegeben. Mir war nicht bewusst, dass der Parameter ja ne Kopie ist. Dann kann das ja nicht gehen. Hätt ich mir eigentlich denken können. Ok das wars schon. Danke dir.