Komisches Zeichen in string



  • Hallo,

    ich schreibe gerade zur Übung an ein paar string-Funktionen und habe jetzt das Problem, dass in meinem mit malloc() erzeugten String ein "komisches" Zeichen auftaucht.

    Zunächst mal der Code:

    typedef struct string
    {
    	char *str;
    	size_t size;
    	ERRORCODE state;
    } string;
    
    string string_create(const char *text)
    {
    	string s;
    	int count;
    
    	s.state = SUCCESS;
    	s.size  = strlen(text);
    	s.str	= (char *) malloc(s.size + 1);
    
    	if (s.str == NULL)
    	{
    		s.state = ALLOC_FAILED;
    		return s;
    	}
    	else
    	{
    		for (count = 0; count < s.size; count++)
    		{
    			*(s.str + count) = text[count];
    		}
    
    		s.str[count + 1] = '\0';
    	}
    
    	return s;
    }
    

    Wenn ich den erzeugten String in der main()-Funktion ausgeben lasse bekomme ich statt "TEST" "TEST=" ausgegeben.

    string a = string_create("TEST");
    printf("%s\n", a.str);
    

    Das Zeichen wird auf diese Art und Weise nicht ausgegeben:

    for (i = 0; i < a.size; i++)
    {
    	printf("%c ", a.str[i]);
    }
    

    Ich setze ja das Nullbyte, nur scheint da am Ende trotzdem was anderes zu stehen? Irgendjemand eine Idee?



  • Nach der Schleife ist die Schleifenbedingung nicht mehr erfüllt, d.h. count == s.size. Du setzt dein Nullbyte zu weit hinten, das +1 muss weg.



  • *facepalm* danke ...



  • Du kannst deine Schleife auch bis <= s.size laufen lassen, denn text hat ja auch das '\0' am Ende (sonst würde strlen nicht funktionieren).


Anmelden zum Antworten