2016-12-05 2 views
0

Gibt es einen Unterschied zwischenUnterschiedliches Verhalten von scanf

scanf("%s", c); 

und

scanf(" %s", c); 

Wie kann mein Programm in irgendeiner Weise beeinflusst? Vielen Dank im Voraus.

+1

Chk dies: http://stackoverflow.com/questions/1247989/ how-do-you-allow-spaces-to-be-used-using-scanf –

+0

Das ist eine ganz andere Frage –

+1

Nein, es gibt keinen Unterschied. – user3386109

Antwort

8

Der scanf%s Konvertierungsbezeichner überspringt führende Leerzeichen und analysiert ein Wort bis zu folgenden Whitespaces und schließt sie nicht mit ein.

Das Hinzufügen eines Leerzeichens vor dem %s hat keine Auswirkung, es ist vollständig redundant.

Dasselbe gilt für %d und %f aber nicht %c oder %[.

Beachten Sie auch, dass die %s und %[ Spezifizierer riskant sind, da Sie scanf keine Grenze für die Anzahl der Zeichen angeben, die in das Ziel gespeichert werden sollen. Dies kann für sscanf() OK sein, da die Konvertierung implizit durch den Inhalt der Quellzeichenfolge eingeschränkt wird, aber für scanf und fscanf vermieden werden muss.

Sie können ein numerisches Argument zwischen den % liefern und den s für die maximale Anzahl von Zeichen vor dem Nullabschluss zu speichern:

char buffer[100]; 
    if (scanf("%99s", buffer) == 1) { 
     /* a word was parsed correctly into buffer */ 
    } 
Verwandte Themen