malloc()- char array, mit %s ausgeben



  • Hallo, hab eigentlich eine ganz simple Frage, ich reserviere mit malloc() ein speicherpaltz für 4 char zeichen, belege diesen speicherplatz dann mit "text", und möchte diesen Wert "text" direkt ueber die Funktion prinf() als String "%s" aufrufen, das klappt auch, aber zusätzlich zu diesem Wert "text" kommen bei der ausgabe noch irgendwelche undifinierte Werte, sodass es bei der Ausgabe wie folgt aussieht "text²²²²"

    Warum ist das so???

    Program:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    { 
      char *ptr;
    
      ptr=((char *)malloc(4*sizeof(*ptr)));
    
      ptr[0]='t';
      ptr[1]='e';
      ptr[2]='x';
      ptr[3]='t';
    
     printf("%s \n", ptr);
    
     free(ptr);
    
    }
    


  • Du hast die terminierende \0 vergessen. Also gleich zweimal 😉



  • Hi,

    da musst immer Textlänge + 1 reservieren, da sprintf so lange Zeichen ausgibt bis es auf \0 trifft.
    Folgendes sollte korrekt funktionieren:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    { 
      char *ptr;
    
      ptr=((char *)malloc(5 * sizeof(char)));
    
      ptr[0]='t';
      ptr[1]='e';
      ptr[2]='x';
      ptr[3]='t';
      ptr[4]='\0'
    
     printf("%s \n", ptr);
    
     free(ptr);
    
    }
    


  • Tim schrieb:

    Du hast die terminierende \0 vergessen. Also gleich zweimal 😉

    achso....!, du meinst ich muss zusäzlich ein Byt Speicher für \0 reservieren und dann noch bei der eingabe \0 manuel dranhängen??



  • Danke Leute, ich probiere es!


Anmelden zum Antworten