programing

백슬래시가 포함된 printf의 출력 이해 (\012)

css3 2023. 10. 27. 22:05

백슬래시가 포함된 printf의 출력 이해 (\012)

이 간단한 코드의 출력을 이해할 수 있도록 도와주시겠습니까?

const char str[10] = "55\01234";
printf("%s", str);

출력은 다음과 같습니다.

55
34

문자순서\012문자열 내부는 팔자 탈출 순서로 해석됩니다.값을012팔색조로 해석되는1010진수로, 이는 라인 피드(\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