Bedeutung von "." in printf

8

Ich habe gerade den klassischen K & amp; R gelesen und bin der folgenden Syntax begegnet:

%Vor%

Was bedeutet "." hier? Wenn ich hier nicht "." anwende, wird die ganze Zeichenfolge gedruckt, aber wenn wir keine "." anwenden, werden maximal maximale Zeichen gedruckt wäre wirklich dankbar, wenn jemand das erklären könnte.

    
user1369975 26.08.2013, 13:30
quelle

5 Antworten

11

In %.*s begrenzt die .* die Anzahl der Bytes, die geschrieben werden. Wenn dies mit einer eingeschlossenen Zahl wie %.34s geschrieben würde, wäre die Zahl das Limit. Wenn ein Sternchen verwendet wird, wird das Limit aus dem entsprechenden Argument in printf genommen.

Ab C 2011 (N1570) 7.21.6.1 4, die Umrechnungsspezifikationen für fprintf usw. :

beschreiben
  

Eine optionale Genauigkeit, die ... die maximale Anzahl von Bytes angibt, die für s Konvertierungen geschrieben werden müssen. Die Genauigkeit hat die Form einer Periode (. ), gefolgt von einem Sternchen ( * (wird später beschrieben) oder einer optionalen dezimalen Ganzzahl; Wenn nur die Periode angegeben ist, wird die Genauigkeit als Null angenommen.

    
Eric Postpischil 26.08.2013, 13:37
quelle
11

Er gibt die maximale Feldbreite für die Zeichenkette an

Die Genauigkeit innerhalb eines String-Formats gibt die maximale Feldbreite an:

%2.6s

gibt eine minimale Breite von 2 und eine maximale Breite von 6 Zeichen an. Wenn die Zeichenfolge größer als 6 Zeichen ist, wird sie abgeschnitten.

    
TheBlastOne 26.08.2013 13:38
quelle
4

Eine Printf-Format-Zeichenfolge ermöglicht die Angabe von Breite und Genauigkeit.

Width, wie %25s , weist printf an, die Zeichenfolge auf die Breite von 25 Zeichen aufzufüllen und Leerzeichen vor der Zeichenfolge einzufügen. (Wenn die Zeichenfolge breiter als 25 Zeichen ist, wird sie immer noch vollständig gedruckt.)

Eine auf ein Zeichenfolgenformat wie " %.25s " angewendete "Genauigkeit" begrenzt die Länge der gedruckten Zeichenfolge auf 25 Zeichen. Eine Zeichenfolge mit 3 Zeichen wird vollständig (ohne Auffüllung) gedruckt, und einer Zeichenfolge mit 30 Zeichen fehlen die letzten fünf Zeichen.

%.*s verhindert das Festschreiben der Genauigkeit im Format und spezifiziert es stattdessen als Ganzzahl-Argument für printf , in Ihrem Fall max .

    
user4815162342 26.08.2013 13:40
quelle
2

Zunächst ist K & amp; R die ursprüngliche Implementierung von C, die sich von der aktuellen Spezifikation unterscheidet. Wenn Sie spezifische Informationen über K & amp; R C wünschen, konsultieren Sie die spezifische Dokumentation.

Aus dem aktuellen C-Standard:

Eine optionale Genauigkeit, die (...) die maximale Anzahl an Bytes angibt, die für s-Konvertierungen geschrieben werden müssen. Die Genauigkeit hat die Form einer Periode (.), Gefolgt von einem Sternchen * (wird später beschrieben) oder einer optionalen Dezimalzahl.

Ссылка

Eine ähnliche Dokumentation ist überall online für mehrere Standards oder Implementierungen verfügbar:

hdante 26.08.2013 13:44
quelle
1

Punkt hat unterschiedliche Bedeutung mit verschiedenen Formatzeichenfolgen. Wenn Sie a.b mit% f verwenden, gibt b die Länge an. a gibt die Anzahl der Dezimalpunkte an. Wenn Sie a.b mit% s verwenden, gibt a die Mindestlänge der Zeichenfolge an. während b die maximale Länge der zu druckenden Zeichenfolge angibt.

    
Gops AB 26.08.2013 15:50
quelle

Tags und Links