Wie entgeht man dem% -Zeichen bei Verwendung printf
in C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
quelle
quelle
%
ist spezifisch fürprintf
, richtig?\045
ist ein Escape zur Kompilierungszeit, der Teil der Sprache ist und sich%
beim Kompilieren in verwandelt .printf
ist eine Laufzeitfunktion, behandelt also Bytes Ihrer Zeichenfolge, nicht C-Quellcode, und verfügt über eigene Escape-Sequenzen, die Teil der Funktion sind . Kurz gesagt,printf
ist eine "Sprache in einer Sprache" undprintf("This is a's value: %s\n", a);
liefert das gleiche Ergebnis wieprintf("This is a's value: \045\0163\012", a);
.printf("hello%c", '%');
. Ist%%
jedoch besser, weil es kein anderes Argument verwendet.Wie andere gesagt haben, wird %% dem% entkommen.
Beachten Sie jedoch, dass Sie dies niemals tun sollten:
Wann immer Sie eine Zeichenfolge drucken müssen, drucken Sie sie immer, immer, immer mit
um zu verhindern, dass ein eingebettetes% Probleme verursacht [Speicherverletzungen, Segfault usw.]
quelle
Wenn die Zeichenfolge keine Formate enthält, können Sie Folgendes verwenden
puts
(oderfputs
):Wenn die Zeichenfolge ein Format enthält:
Wie in den Kommentaren angegeben,
puts
wird ein\n
an die Ausgabe angehängt undfputs
nicht.quelle
puts
. Ich habe nie daran gedacht,puts
Strings zu drucken und bin direkt zu gesprungenprintf
. Nicht länger.Mit sich selbst ...
quelle
Nitpick:
Sie entkommen nicht wirklich dem
%
in der Zeichenfolge, die das Format für dieprintf()
(undscanf()
) Funktionsfamilie angibt .Das
%
in derprintf()
(undscanf()
) Funktionsfamilie startet eine Konvertierungsspezifikation. Eine der Regeln für die Konvertierungsspezifikation besagt, dass a%
als Konvertierungsspezifizierer (unmittelbar nach dem%
, mit dem die Konvertierungsspezifikation gestartet wurde) bewirkt, dass ein'%'
Zeichen ohne konvertiertes Argument geschrieben wird.Die Zeichenfolge enthält wirklich 2
'%'
Zeichen (im Gegensatz zu Escapezeichen:"a\bc"
ist eine Zeichenfolge mit 3 Nicht-Null-Zeichen;"a%%b"
ist eine Zeichenfolge mit 4 Nicht-Null-Zeichen).quelle
Verwenden Sie ein doppeltes %%
quelle
So was:
quelle
Der Backslash in C wird verwendet, um Zeichen in Zeichenfolgen zu maskieren. Zeichenfolgen würden% nicht als Sonderzeichen erkennen, und daher wäre kein Entkommen erforderlich. Printf ist eine andere Sache: Verwenden Sie %%, um ein% zu drucken.
quelle
Sie können %% verwenden:
Das Ergebnis ist:
quelle
Sie verwenden einen falschen Formatbezeichner, den Sie
%%
zum Drucken verwenden sollten%
. Ihr Code sollte sein:Lesen Sie mehr alle in C verwendeten Formatspezifizierer .
quelle
Ja, benutze printf ("hallo %%"); und es ist geschafft.
quelle
Sie können einfach
%
zweimal verwenden, das heißt"%%"
Beispiel:
quelle
Das doppelte '%' funktioniert auch in ".Format (…). Beispiel (mit iDrawApertureMask == 87, fCornerRadMask == 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
gibt den gewünschten und erwarteten Wert von (String-Inhalt in) csCurrentLine an;"% ADD87C, 0.0500 *% ""quelle