falsche Ausgabe



  • Hallo Zusammen,

    nach sehr langer Pause habe ich wieder mit programmieren angefangen und schon das Erste Problem:

    #include <stdio.h>
    int main(void)
    {
     char txt[80];
     printf("bitte eine Eingabe:\n");
     scanf("%s",txt);
     printf(txt);
     printf("\n");
    return 0;
    }
    

    1.) wenn ich z.b. hello world eingebe erscheint nur hello während world nicht ausgegeben wird. Mit helloworld zusammen gehts.
    2.) wie kann ich Zeile 7 und 8 zusammenfassen ?

    vielen Dank



  • zu 1.): sollte mit gets funktionieren -> http://www.cplusplus.com/reference/clibrary/cstdio/gets.html

    zu 2.):

    printf( "%s\n", txt );
    

    ungetestet, hoffe ich habs richtig in erinnerung, hab lange nichts in C gemacht.

    mfg,
    julian



  • myouness27 schrieb:

    1.) wenn ich z.b. hello world eingebe erscheint nur hello während world nicht ausgegeben wird. Mit helloworld zusammen gehts.

    Für scanf ist beim Leerraum die Eingabe zuende.

    myouness27 schrieb:

    2.) wie kann ich Zeile 7 und 8 zusammenfassen ?

    printf("%s\n", txt);



  • Julian__ schrieb:

    zu 1.): sollte mit gets funktionieren -> http://www.cplusplus.com/reference/clibrary/cstdio/gets.html

    Ja, bist du denn wahnsinnig!?!?! Hat dir noch niemand etwas von Buffer Overflows erzaehlt?



  • Alse sichere alternative zu gets() würde ich dir die Funktion fgets() (auch aus der stdio.h) empfehlen



  • myouness27 schrieb:

    char txt[80];
     printf("bitte eine Eingabe:\n");
     scanf("%s",txt);
    

    Hier ist wie bereits gesagt ein fgets(txt, 80, stdin); besser.
    (scanf und gets sind unsicher für Buffer-Overflows)

    myouness27 schrieb:

    printf(txt);
    

    Sowas sollte man auch nie machen. Das ist gefährdet für Formatstringangriffe.
    Der "Format String" sollte immer fix oder zumindest sehr gut geprüft sein.
    Also printf("%s", txt); und dann kann man auch das '\n' leicht anhängen.



  • noch ein kurzer Hinweis zu fgets/scanf:
    -fgets liest den Zeilenumbruch mit ein
    -mit scanf("%80s", txt); kann man auch eine maximale länge angeben. (fgets ist aber trotzdem empfehlenswerter)


Log in to reply