Komische Ausgaben beim Printen von Pointer
-
Hi Leute!
Habe noch kaum Ahnung von C. Versuche mich derzeit bisschen in Pointer-Geschichten einzuarbeiten. Dazu habe ich ein Prog. geschrieben, das einen String an angegebener Stelle schneiden soll und nur den ersten Teil davon ausprinten soll.
#include <stdio.h> #include <string.h> char *split(char string[], char whereToSplit) { char newString[100]; //Ausgabestring char *pointer; //Pointer um den String zu fuellen pointer = &string[0]; int i = 0; //mach was solange arrayende nicht erreicht while(*pointer != '\0') { //fuelle neuen array auf newString[i] = *pointer; //wenn Split-punkt erreicht return Array newString if(*pointer == whereToSplit) { //setze pointer auf Anfang von newString pointer = &newString[0]; return pointer; } pointer++; i++; } return; } int main() { char string[] = "abcdefghij"; char *pointer; pointer = split(string, 'e'); //printe Array-Elemente solange Array-Ende nicht erreicht while(*pointer != '\0') { print("%c \n", *pointer); ++pointer; } return(0); }
Aufruf
split(string, 'c');
sollte eigentlich sowas wie "abcd" ausgeben anstatt "a���" . Was habe ich übersehen? Warum so eine seltsame Ausgabe?
thanx4help
-
stack-arrays sind nicht als rückgabewert geeignet
*edit*
btw - schonmal was von puts gehört ?
-
puts? ähhm.. ne, keine Ahung was das ist! Gehts nicht ohne?
-
du kannst den neuen string mit static initialisieren (bzw. auch global, wobei das mit den globalen Variablen immer so eine Sache ist). Alternativ: Viele Ein- und Ausgabefunktionen benötigen einen puffer (also zeiger auf char) als zusätzlichen parameter. der zeiger wird dann in main() initialisiert und innerhalb der funktion verändert, statt ihn erst innerhalb der funktion zu erzeugen.
PS: puts() gibt einen kompletten String auf dem Bildschirm aus.
#include <stdio.h> #include <string.h> char *split(const char *string, char whereToSplit) { static char newString[100]; //mach was solange arrayende nicht erreicht for (int i=0;i<strlen(string);i++) { //fuelle neuen array auf newString[i] = string[i]; if(string[i] == whereToSplit) break; } return newString; } int main() { char string[] = "abcdefghij"; char *pointer=split(string, 'e'); //printe Array-Elemente solange Array-Ende nicht erreicht while(*pointer) { printf("%c \n", *pointer); pointer++; } return 0; }