백슬래시가 포함된 printf의 출력 이해 (\012)
이 간단한 코드의 출력을 이해할 수 있도록 도와주시겠습니까?
const char str[10] = "55\01234";
printf("%s", str);
출력은 다음과 같습니다.
55
34
문자순서\012
문자열 내부는 팔자 탈출 순서로 해석됩니다.값을012
팔색조로 해석되는10
10진수로, 이는 라인 피드(\n
대부분의 터미널에 문자가 표시됩니다.
위키피디아 페이지에서:
팔순 탈출 순서는 다음과 같이 구성됩니다.
\
그 다음에 한, 두, 세 팔자 숫자가 나옵니다.팔자 탈출 시퀀스는 세 개의 팔자 숫자가 이미 포함되어 있거나 다음 문자가 팔자 숫자가 아닌 경우 종료됩니다.
당신의 수열은 세 개의 유효한 팔자 숫자를 포함하고 있기 때문에, 그것은 그렇게 파싱될 것입니다.계속되는 일이 아닙니다.3
부터34
, 네 번째 숫자가 되고 세 개의 숫자만 지원되기 때문입니다.
그래서 당신은 당신의 문자열을 다음과 같이 쓸 수 있습니다."55\n34"
, 더 이상 새로운 라인을 하드 coding하는 것이 아니라 컴파일러가 적합한 것을 생성할 수 있도록 하는 것이기 때문에 현재 보고 있는 것이 더 분명하고 휴대성이 더 좋을 것입니다.
\012
는 기호 코드를 나타내는 이스케이프 시퀀스입니다.
012 = 10 = 0xa = LINE FEED (in ASCII)
그래서 당신의 끈은55[LINE FEED]34
.
LINE FEED
문자는 많은 플랫폼에서 새로운 줄 순서로 해석됩니다.그렇기 때문에 단말기에 두 개의 문자열이 표시됩니다.
\012
는 다른 사람들이 이미 언급한 것처럼 새로운 줄 탈출 순서입니다. (chux absolute rect가 언급했듯이 ASCII가 사용된 문자 집합이 아니라면 무엇이 다를 수 있습니다.그러나 어쨌든 이 표기법에는 팔자 숫자가 있습니다.)
이것은 ISO/IEC 9899의 c99에 대해 말하는 것처럼 표준에 의해 의미됩니다.
대상:
6.4.4 문자 상수
[...]
3 단일 인용문', 이중 인용문', 물음표 ?, 백슬래시 \ 및 임의의 정수 값은 다음 탈출 순서 표에 따라 나타낼 수 있습니다.
'하나의 따옴표' \'
큰따옴표" \"
물음표? \?
백슬래시\ \
팔분의 문자 \팔분의 숫자
16진수 문자 \x 16진수
그리고 그 범위는 다음과 같습니다.
제약
9 8진수 또는 16진수 이스케이프 시퀀스의 값은 정수 문자 상수의 경우 부호 없는 문자 유형의 경우 표시 가능한 값 범위 또는 넓은 문자 상수의 경우 wchar_t에 해당하는 부호 없는 유형의 경우 표시 가능한 값 범위여야 합니다.
언급URL : https://stackoverflow.com/questions/29819239/understanding-output-of-printf-containing-backslash-012
'programing' 카테고리의 다른 글
가장 유용한 사용자 제작 C마크로스(GCC에서도 C99)? (0) | 2023.10.27 |
---|---|
숫자에서 최하위 비트의 값을 얻으려면 어떻게 해야 합니까? (0) | 2023.10.27 |
AngularJS+Jasmin: $httpBackend가 예상대로 작동하지 않습니다. (0) | 2023.10.27 |
Oracle에서는 테이블에 열을 "삽입"할 수 있습니까? (0) | 2023.10.27 |
Spring ApplicationListener가 이벤트를 수신하지 않습니다. (0) | 2023.10.27 |