2013-06-09 5 views
0

문자열 리터럴에서 처리 된 이스케이프 값 (예 : \ nnn, \ xnn)은 어떻게됩니까?처리 된 이스케이프 값 (예 : nnn, xnn)은 문자열 리터럴에서 어떻게됩니까?

"foo \x61 \042 baa" 

\x61\042는 메모리 위치에 진수로 변환 및 저장 고려? 그렇다면 "foo 97 34 baa"으로 번역됩니다. 컴파일시입니까? 모든 이스케이프 문자에 적용됩니까? 그렇지 않다면 C 컴파일러가 어떻게 처리할까요?

+0

참조 용 : C 표준, 6.4.4.4 문자 상수 및 6.4.5 문자열 리터럴 – dyp

답변

3

문자열에있는 모든 문자 (또는 그 안에없는 문자)는 숫자입니다. c에서는 문자열이 8 비트 숫자의 배열로 저장되어 문자열의 끝을 나타 내기 위해 끝에 0이 붙습니다 ("null 종결 자"). 이스케이프 시퀀스는 일반 문자와 정확히 같은 방식으로 처리됩니다. ASCII 값은 배열에 저장됩니다. 귀하의 예에서 다음과 동일합니다 :

"foo \x61 \042 baa" 
"foo a \" baa" 

{ 'f', 'o', 'o', ' ', '\x61', ' ', '\042', ' ', 'b', 'a', 'a', '\0'} 
{ 'f', 'o', 'o', ' ', 'a', ' ', '"', ' ', 'b', 'a', 'a', '\0'} 
{ 'f', 'o', 'o', ' ', 0x61, ' ', 042, ' ', 'b', 'a', 'a', '\0'} 
{0x66, 0x6f, 0x6f, 0x20, 0x61, 0x20, 0x22, 0x20, 0x62, 0x61, 0x61, 0x0} 
{ 102, 111, 111, 32,  97, 32,  34, 32, 98, 97, 97, 0} 
{0146, 0157, 0157, 040, 0141, 040, 042, 040, 0142, 0141, 0141, 0}