pointer und sprintf



  • Ich hab ein Problem ich hab hier ein kleines Testprogrämmchen welches ein Namenskuerzel erstellen soll mit dem ersten Buchstaben des Vor- und Nachnamens doch irgend was beim sprintf klemmt. Weiss einfach nicht mehr weiter hab noch nie zuvor mit sprintf gearbeitet und die Erklärung in Borland hat mir auch nicht die Lösung vor die Augen geholt.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void kuerzung(char *vorname, char *name){
    
    	char kuerzel[2];
    
    	sprintf(kuerzel, vorname[0], name[0]);
        printf("%s", kuerzel);
    
    }
    
    int main(){
    
    	char vorname[12] = {"Hans"};
        char name[12] = {"Meier"};
    
        kuerzung(vorname, name);
        getchar();
    
        return 0;
    
    }
    


  • musste mit strcpy in string.h machen



  • --linuxuser-- schrieb:

    musste mit strcpy in string.h machen

    öhm komm net ganz draus was du meinst kannst du das genauer beschreiben ?? Wahrscheinlich versteh ich einfach den Satz falsch 😛



  • *ptr schrieb:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void kuerzung(char *vorname, char *name){
        char kuerzel[2];                       /* Array zu klein: "Hans Meier" braucht 11 Zeichen (mit '\0') */
        sprintf(kuerzel, vorname[0], name[0]); /* vorname[0] = 'H', name[0] = 'M'
                                                * was Du machen wolltest, ist die Adresse auf den Anfang der Arrays zu uebergeben
                                                * ausserdem fehlt der Format-String
                                                */
        printf("%s", kuerzel);
    }
    
    int main(){                                /* Fehler: "main()" ist in ANSI C nicht erlaubt.       */
        char vorname[12] = {"Hans"};           /* Hinweis: "Hans" braucht nur 5 Zeichen ("Hans\0").   */           
        char name[12] = {"Meier"};             /* Hinweis: "Meier" braucht nur 6 Zeichen ("Meier\0"). */
    
        kuerzung(vorname, name);
        getchar();
    
        return 0;
    }
    

    Hier eine korrigierte Fassung:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void kuerzung(char *vorname, char *name){
        char kuerzel[11];  /* Array-Groesse korrigiert */                      
        sprintf( kuerzel, 
           "%s %s",        /* Format-String: "%s %s" bedeutet "String String" */  
           &vorname[0],    /* Adresse auf erstes Zeichen von "vorname"        */
           &name[0]        /* Adresse auf erstes Zeichen von "name"           */
        );
        printf("%s", kuerzel);
    }
    
    int main( void ){                          /* ANSI-C konformes "main" */
        char vorname[12] = {"Hans"};      
        char name[12] = {"Meier"};
    
        kuerzung(vorname, name);
        getchar();
    
        return 0;
    }
    


  • und mach dein char kuerzel[] groesser.
    wenn da zwei buchstaben reinsollen, muss es mindestens 2 chars gross sein (nullterminierung).



  • wow 😮 danke für die schnelle und ausführliche Hilfe vorallem grossen dank für die Auskommentierung 👍 da hab ich wieder viel gelernt was ich bis jetzt immer falsch gemacht hab



  • Ich hab uebrigens grade erst gesehen, dass Du ja eigentlich ein Kuerzel machen wolltest.

    In dem Fall muesste das so aussehen:

    void kuerzung(char *vorname, char *name){
        char kuerzel[3];  /* Array-Groesse jetzt so, dass 2 Buchstaben und '\0' reinpassen */                      
        sprintf( kuerzel,
           "%c%c",         /* Format-String: "%c%c" bedeutet "ZeichenZeichen" */  
           vorname[0],     /* erstes Zeichen von "vorname"                    */
           name[0]         /* erstes Zeichen von "name"                       */
        );    
        printf("%s", kuerzel);
    }
    

    EDIT: gern geschehen, uebrigens! 🙂


Anmelden zum Antworten