Funktion gibt nicht Zeichenkette, sondern einzelnes Zeichen zurück
-
ich habe folgende Funktion geschreiben:
char ks(char *str) { for(int i=0;str[i] != '\0';i++) str[i] = str[i] | 0x20; return (*str); }
wenn ich nun schreibe 'ks(test)' gibt mir die Funktion nicht die Zeichenkette, sondern lediglich das erste Zeichen zurück. An was liegt das?
-
char* ks(char *str) { for(char *p=str;*p;++p) *p|=0x20; return str; }
char ist nur ein zeichen char* ist ein zeiger, in deinem fall einer den beginn des speicherbereichs zeigt in dem du die zeichen deinens strings gespeichert hast
-
++p???
-
ich zerlege es mal in ne while-schleife
char*p=str;// nimm einen char-zeiger und lass ich auf den anfang von str zeigen while(*p){//so lange p nicht auf ein nullbyte zeigt *p|=0x20; //verordere das worauf p zeigt mit 0x20 ++p; //lass p aufs nächste zeichen zeigen }
-
Der Unterschied zwischen p++ und ++p steht auch in der F.A.Q.
Einfach dort den letzten Beitrag lesen, da stehts ganz gut erklärt.
-
Es geht darum das ich nicht wuste dass man zeiger einfach inkrementieren kann. Was passiert genau wenn man das macht?
-
der in einem zeiger gespeicherte wert entspricht ja einer adresse in unserem fall der adresse wo das erste element der strings str zu finden ist...
wenn du einen zeiger incrementierst wird automatisch in abhänigkeit von der grösse des datentyps ein element weitergesprungen also um sizeof(datentyp)
-
ahh ok! danke