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

Anmelden zum Antworten