scanf () Variable Länge Spezifizierer

8

Wie kann ich eine Variable verwenden, um die maximale Anzahl an Zeichen anzugeben, die scanf() einlesen soll?

Wenn Sie zum Beispiel printf() verwenden, können Sie das * wie folgt verwenden

%Vor%

Dies wird nur 5 Zeichen drucken, wie kann ich scanf nur in MAXVAL lesen? MAXVAL muss als Längenangabe verwendet werden. Ich kann nicht einfach

%Vor%

Im Moment kann ich nur daran denken, mit scanf in ein großes Array zu lesen und dann ssprintf zu verwenden, um die Zeichenfolge in meiner begrenzten Zeichenfolge zu speichern. Die Verwendung eines Längenbezeichners wäre jedoch viel einfacher.

    
CS Student 20.08.2014, 17:13
quelle

4 Antworten

13

Sie können den C-Präprozessor verwenden, um Ihnen dabei zu helfen.

%Vor%

Der Prozessor kombiniert "%" STR(MAXVAL) "s" mit "%5s"

    
R Sahu 20.08.2014, 17:22
quelle
5
%Vor%     
BLUEPIXY 20.08.2014 17:26
quelle
2

Sie können nicht. Sie müssen etwas anderes als scanf() verwenden. Eine gute und beliebte Wahl ist fgets() , obwohl die Semantik etwas anders ist: fgets() liest eine Eingabezeile, während scanf() mit %s whitespace-getrennte Zeichenfolgen liest.

Um fgets() zu verwenden, möchten Sie etwas wie:

%Vor%

Wenn Sie aus irgendeinem Grund scanf() wirklich verwenden möchten, werfen Sie einen Blick auf diese Frage: Wie verhindert man, dass scanf einen Pufferüberlauf in C verursacht?

    
Filipe Gonçalves 20.08.2014 17:18
quelle
0

Kernighan und Pike empfehlen die Verwendung von snprintf (), um die Formatzeichenfolge zu erstellen. Ich entwickelte diese Idee zu einer Methode, die Strings sicher liest:

%Vor%     
Daniel Trugman 20.10.2017 11:46
quelle

Tags und Links