String mit Blanks auffüllen



  • gibt es irgend wie die Möglichkeit einen String mit leer zeichen auf zufüllen meine Idee spinnt leider etwas rum:

    char *fillstr(char *s, int len){
         char s2[13] = {"            "};
    
         if(len >= 12) len =12;
         s2[len] = '\0';
         strcat(s2, s);
         s = s2;
         return s;}	 
    
    int main(void){
      char s[] ="mein Alter ist";
    
     cout << fillstr(s, 4); 
     return 0;
    }
    

    Beim Kompilieren gibt es keine Fehlermeldung und bei einem Breakpoint bei return s wird mir auch richtig angezeigt:

    mein alter ist
    

    leider kommt dann eine Fehlermeldung
    Run-Time Check Failure #2 - Stack around the variable 's2' was corrupted.

    gibt es eine Andere sinvolle Lösung für mein Problem oder ein Fix der bei mir untergegangen ist?



  • ja gibt es.

    for(i=0;i<len;i++)
    {
    string[i]=' ';
    }
    


  • Inspiziere Zeile 8 nochmal genauer. Worauf zeigt der zeiger s, den du zurückgibst?



  • @rolfo kannst mir kurz helfen seh den Wald vor lauter Bäumen nicht.



  • char s2[13] ist beim verlassen der Funktion nicht mehr gültig, da lokale Variable. Ergo Zeiger darauf auch nicht.



  • Dein Text "mein Alter ist" ist ja schon länger als der Platz in s2.

    Wenn du schon cout nimmst, dann kanst du auch std:string nehmen.

    Vorausgesetzt, im char-Array ist genug Platz und es ist nicht const, kannst du dir etwas mit memmove und memset bastelen.
    Oder selber eine Schleife zum Verschieben und eine andere zum Auffüllen machen.

    Wenn du ein neues char-Array nimmst, kannst du auch sprintf mit entsprechenden Formatspecifieren (und Modifiern) nehmen.



  • Was ist daran C++?
    Was hindert dich daran memset zu benutzen wenn alle anderen Konzepte ganz offensichtlich scheitern?

    s2[len] = '\0';
    

    sollte eher

    s2[0] = '\0';
    

    und dann strcat.

    Viele Baustellen.



  • Ich habe das so verstanden, das der TO einen String eine bestimmte Anzahl Leerzeichen voranstellen möchte.

    Darum ist das s2[len] = '\0'; schon in Ordnung, aber nicht ganz Zuende gedacht.

    Und das cout in Zeile 14 ist zumindest nicht C.



  • Es geht eher darum das es ein C Sting ist.


Anmelden zum Antworten