2016-05-02 13 views
0

Ich war mit grundlegenden c Programmen experimentiert und ein Programm wie dieses, schriebWie wird die Escape-Sequenz in printf erkannt?

#include <stdio.h> 
int main() 
{ 
    printf("hello 0x0a");//0x0a is hex value for \n 
    return 0; 
} 

druckt „Hallo 0x0a“.

Gibt es eine Möglichkeit, Escape-Sequenzen als Dezimal oder Hex-Wert in printf zu geben?

Antwort

3

Es gibt einen Weg - aber das ist eigentlich kein Merkmal von printf, sondern Teil der Sprache.

C-String-Literale können escape sequences enthalten, die vom Compiler ausgewertet werden (nicht von printf zur Laufzeit).

Die richtige Escape-Sequenz für eine neue Zeile in hex geschrieben wäre \x0a (oder \x0A in Ihrem Ermessen):

printf("hello \x0a"); 
+0

also 0x0a wird \ x0a? Warum wird \ 0x0a nicht verwendet? – mrigendra

+0

Weil '\ 0x0a' keine gültige Escape-Sequenz ist. '\ 0' könnte der Anfang einer Escape-Sequenz für eine Oktalzahl sein (' \ nnn' in der Tabelle, auf die in meiner Antwort verwiesen wird), aber der Parser würde es nicht mehr als Escape-Sequenz interpretieren, wenn er 'x' liest. – Florian

+0

Ich versuchte mit \ 10 in Dezimal, wird es nicht interpretieren? – mrigendra

1

Ja, das Drucken der Zeilenende-Marke seinen numerischen Wert 0x0a in ASCII verwenden.

#include <stdio.h> 

    int main() 
    { 
    printf("Hello,%cworld!", 0x0a); 
    } 

Auch Rück Wert 0x08, Horizontal Tab 0x09. Referenzlink here.