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.
Alsoprintf("%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)