pointer-string funktioniert nicht
-
Die folgende Funktion will bei mir nicht funktionieren, obwohl printf das richtige ausgibt..
Und wenn ich anstatt des *o = '\0'; das, was in den Kommentar-Tags steht, nehme, sind später lauter ² im String, ansonsten ist da gar nichts..char *foo(int c) { char *o; o = (char *)malloc(5); while(c > 2) { *o++ = rand() % 100 + 50; /*printf("%c", *(o-1));*/ *o++ = rand() % 100 + 50; /*printf("%c", *(o-1));*/ *o++ = rand() % 100 + 50; /*printf("%c", *(o-1));*/ *o++ = rand() % 100 + 50; /*printf("%c", *(o-1));*/ c -= 3; } *o = '\0'; /**(o + 5) = '\0'; /*printf("%s", o);*/ return o; } int main(void) { printf("%s", foo(5)); getchar(); return 0; }
Wenn ich die Funktion umschreibe, klappt alles auf einmal, aber warum das so ist, weiß ich nicht?
char *foo(int c) { char *o; char *k; o = (char *)malloc(5); k=o; while(c > 2) { *k++ = rand() % 100 + 50; *k++ = rand() % 100 + 50; *k++ = rand() % 100 + 50; *k++ = rand() % 100 + 50; c -= 3; } *k = '\0'; return o; }
-
Du änderst in der ersten Version ja auch die Pointer-Variable 'o' und gibst diese zurück, so daß diese dann auf einen undefinierten Speicherbereich zeigt (hinter deinen allokierten 5 Bytes).
Und wofür ist eigentlich diese komische Schleife???
Ich würde ja einfach eine Zählschleife über die Anzahl der einzutragenden Zeichen machen:char *o = malloc(5); char *k = o; int i; for(i=0; i<4; i++) { *k++ = rand() % 100 + 50; } *k = '\0'; return o;
-
ich versteh das auch nicht ehrlich gesagt... erklär das mal eine genauer..
-
Der Code soll eigentlich nur ein Beispiel darstellen ^^
Aber wo ändere ich denn o?
"so daß diese dann auf einen undefinierten Speicherbereich zeigt (hinter deinen allokierten 5 Bytes)"
Wieso denn dahinter?..
Irgendwie verstehe ich das nicht
-
ptrnap schrieb:
Aber wo ändere ich denn o?
Da z.B. mit dem ++-Operator:
*o++ = rand() % 100 + 50;
Allgemeiner Rat: Nicht mit Pointerarithmetik arbeiten wo normaler Zugriff über [] genauso gut ist.
-
Ich dachte, dass sähe so aus:
Allokierte Bytes: 1 2 3 4 5 *o *++o *(o+1) *++(o+1) *o *o++ *o++ *o *(o+1) *(o+2)
Und wenn ich o dann inkrementiere, dass es dann auf den nächsten allokierten Byte zeigt..
-
Wie kann ich das denn machen, ohne einen zweiten Zeiger zu erzeugen?
-
Und wieso stimmt das oben genannte Bild nicht?
-
*hust*
-
Frohes Fest euch allen!
PS: ...