Angenommen, Sie haben eine Zeichenfolge, die NICHT null
terminiert ist, und Sie kennen die genaue Größe. Wie können Sie diese Zeichenfolge printf
in C drucken ? Ich erinnere mich an eine solche Methode, kann sie aber jetzt nicht herausfinden ...
107
C
Kontext sind alle Zeichenfolgen nullterminiert. Arrays von char ohne eine Null in ihnen sind keine Strings ... sie sind Arrays von char :)Antworten:
Es gibt eine Möglichkeit mit printf, es geht so:
Sie müssen nichts kopieren, die ursprüngliche Zeichenfolge oder den ursprünglichen Puffer müssen nicht geändert werden.
quelle
printf
auch nach einem Jahrzehnt ... :)printf
werden bis zu 11 Zeichen gedruckt oder bis NULL angezeigt wird , je nachdem, was zuerst eintritt . In Ihrem Beispiel steht NULL an erster Stelle. Wenn Sie eine maximale Länge angeben, verliert NULL nicht die Bedeutung für "Ende der Zeichenfolge" fürprintf
.Hier finden Sie eine Erklärung, wie es
%.*s
funktioniert und wo es angegeben ist.Die zweite Form dient zum Abrufen der Genauigkeit aus der Argumentliste:
- Ausgabekonvertierungssyntax im glibc-Handbuch
Bei der
%s
Formatierung von Zeichenfolgen hat die Genauigkeit eine besondere Bedeutung:- Andere Ausgabekonvertierungen im glibc-Handbuch
Andere nützliche Varianten:
"%*.*s", maxlen, maxlen, val
rechtfertigt das Einfügen von Leerzeichen vor;"%-*.*s", maxlen, maxlen, val
wird links rechtfertigen.quelle
"%-*.*s", padding, str_view.size(), str_view.data()
Sie können ein fwrite () verwenden, um zu stdout!
Auf diese Weise geben Sie die ersten Zeichen (in der Variablen number_of_chars definierte Nummer) in eine Datei aus, in diesem Fall in stdout (die Standardausgabe, Ihr Bildschirm)!
quelle
printf("%.*s", length, string)
wird nicht funktionieren.Dies bedeutet, dass bis zu Längenbytes ODER ein Nullbyte gedruckt werden, je nachdem, was zuerst eintritt. Wenn Ihr nicht nullterminiertes Zeichenarray vor der Länge null Bytes enthält, stoppt printf auf diesen und fährt nicht fort.
quelle
Die Stringlänge beträgt 5.
quelle
Ich habe den Code bearbeitet, hier ist eine andere Möglichkeit:
quelle