2013-07-02 15 views
2

에 그 \의 x는 문자 ASCII의 16 진수 표현입니다 무엇을 알고 평균 X 않습니다 는 는 C

printf("%c",'\x41'); // A 
printf("%c",'\X41'); // 1 

이유

?

참조 : http://c.comsci.us/etymology/literals.html (가장 아래 표 참조)

+3

컴파일러에서'\ X'가 '알 수없는 이스케이프 시퀀스'라고 경고합니까? – devnull

+1

대문자 사용은 특히 이스케이프 시퀀스에서 중요합니다. –

+1

Take-home 메시지 : ** 항상 ** gcc -Wall ...로 컴파일하십시오. –

답변

6

난 당신이 -Wall 옵션을 사용하여 컴파일 요청합니다.

aaa.c: In function ‘main’: 
aaa.c:6:14: warning: unknown escape sequence: '\X' [enabled by default] 
aaa.c:6:14: warning: multi-character character constant [-Wmultichar] 

위의 메시지에서 X는 무시됩니다.

'41'을 고려하면 복수 문자 문자 상수입니다.

@paddy가 말한 것처럼, sinle-quotes의 마지막 문자가 사용되었습니다. 그래서 '1'문자가 인쇄됩니다. 결과는 다를 것이다, 그래서 탈출의

세트는,이 표준 아닙니다

\a alert (bell) character    \\ backslash 
\b backspace       \? question mark 
\f formfeed       \’ single quote 
\n newline        \" double quote 
\r carriage return      \ooo octal number 
\t horizontal tab      \xhh hexadecimal number 
\v vertical tab 
+1

+1에 대한 +1입니다. – 0decimal0

+0

예! 너는 나를 때렸다. – BrainSteel

+3

... ASCII 값 41 *은 *'1' ... – caf

8

시퀀스.

\X이 유효한 제어 시퀀스가 ​​아니므로 특정 컴파일러가 작은 따옴표로 마지막 문자를 선택하여 사용하고 있습니다.

이렇게하면 : '\X12345' 당신은 아마 5을 얻을 것입니다. \X에는 특별한 것이 없습니다. 당신이 당신의 피할 수없는 문자 리터럴로부터 그것을 빼내면 같은 결과를 얻게 될 것입니다.

+2

내 버전의 GCC에서 '\ X12345'를 인쇄하면 실제로 5가 인쇄된다는 것을 확인할 수 있습니다. – BrainSteel

1

첫 번째 줄은 \x41이고 0x41은 'A'의 ASCII 값이며 'A'가 인쇄됩니다.

\ X (대문자)가 유효한 이스케이프 시퀀스가 ​​아니기 때문에 두 번째 줄은 구문 오류입니다. 이제 일어나는 일은 컴파일러에 달려 있지만 GCC는 \ X4를 유효하지 않은 것으로 간주하여 무시하고 '1'을 인쇄 할 리터럴 문자로 남겨 둡니다.