Ich bin ein wenig verwirrt darüber, wie printf ASCII-Zeichen behandelt.printf die ASCII-Zeichen% gibt manchmal c und nicht%
Wenn ich das Zeichen% so drucke, bekomme ich eine korrekte Antwort wie "ascii%", und das ist in Ordnung.
printf("ascii %% \n");
printf("ascii \x25 \n");
printf("ascii %c \n", 0x25);
ascii %
Und ich kann sie auf der gleichen Zeile wie diese setzen, und ich erhalte „ascii%%“, und das ist auch in Ordnung.
printf("ascii %c \x25 \n", 0x25);
ascii % %
Aber ich kann das seither in der anderen Reihenfolge nicht bekomme ich c und nicht%, wie diese "ascii% c"
printf("ascii \x25 %c \n", 0x25);
ascii %c
Was geschieht?
Allerdings habe ich festgestellt, dass es scheint printf behandelt \ x25 wie das normale% -Zeichen, da, wenn ich ein weiteres% direkt nach der Ausgabe hinzufügen (\ x25%) wird es was ich erwarte.
printf("ascii \x25% %c \n", 0x25);
ascii % %
Aber dann habe ich auch bemerkt, dass ein einzelnes% Druck auch zu funktionieren scheint, aber ich habe es nicht erwartet zu.
printf("ascii % \n");
ascii %
Warum diese Arbeit habe, dachte ich, dass ein einzelnes% keine gültige Eingabe in printf war ... Könnte jemand klären, wie printf funktionieren soll?
Hinweis: Ich benutze die Standard-GCC auf Ubuntu 12.04 (gcc Version 4.6.3).
Große Frage! Erhalten Sie keine Warnung für "ascii% \ n" '? –
"\ x25% c" gibt "Warnung: Konvertierung fehlt Typ am Ende des Formats [-W Format"], aber das bezieht sich auf den Platz seit "\ x25% c" kompiliert ohne Warnung. – Johan
Nein. Es ist nicht im Zusammenhang mit dem Raum, zumindest nicht direkt. Wenn 'printf' das erste'% 'sieht, beginnt es tatsächlich, die Formatierungssequenz zu interpretieren. Der Platz kann innerhalb einer Formatierungssequenz für Zahlen oder Zeichenfolgen gültig sein, sodass der Platz akzeptiert wird. Aber dann wird kein weiteres Formatzeichen gefunden (d, x, s, ...), das die Warnung anzeigt. Auf der anderen Seite, wenn kein Leerzeichen vorhanden ist, besteht die Formatierungssequenz einfach aus zwei aufeinanderfolgenden Prozent und ist somit gültig. –