2017-03-07 12 views
7

나는이 네 가지 조건에 의해 혼란 스러워요 : 문자표준의 문자열 리터럴 및 문자열 리터럴?

  • 문자열을

  • 문자 그대로

  • 문자열을 상수.

  • 멀티 바이트 문자 순서

그리고 C Standard이 인용 읽기 :

문자 문자열 리터럴 필요가 문자열 (7.1.1 참조)하지를 널 때문에 문자는 \0 이스케이프 시퀀스에 의해 포함될 수 있습니다.

첫 번째 부분은 무엇을 의미합니까?

+0

문자열 리터럴 == 문자 문자열 리터럴 – DyZ

+0

@DYZ별로 없습니다. 표준은 문자, UTF-8 및 넓은 문자열 리터럴에 대해 이야기합니다. 그럼에도 불구하고, 질문은 오히려 문자 그대로 대 문자열에 관한 것이라고 생각합니다. – AlexD

+1

문자열은 정의상 null 문자로 종료됩니다. 문자열 리터럴은 그 안에 null 문자를 포함 할 수 있습니다. 따라서 문자열 리터럴은 문자열이 아닐 수도 있습니다. –

답변

3

  • 중 하나 문자열이다 문자열 리터럴 리터럴 예컨대 "abc";
  • 또는 UTF-8 문자열 리터럴. u8"abc";
  • 또는 넓은 문자열 리터럴입니다. L"abc". 표준 (강조 광산)에서

:

리터럴 문자열이 "xyz" 같이 큰 따옴표로 묶인 0 개 이상의 멀티 바이트 문자의 순서가

. A UTF-8 문자열 리터럴은 접두사 u8을 제외하고는 동일합니다. 넓은 문자열 리터럴은 , u 또는 U이라는 접두사를 제외하고는과 동일합니다.
....
변환 단계 7에서 문자열 리터럴 또는 리터럴의 결과 인 각 멀티 바이트 문자 시퀀스에 값 0의 바이트 또는 코드가 추가됩니다. 78)

78) 널 문자가 \ 0 이스케이프 시퀀스 안에 삽입 될 수 있으므로, 문자열 (7.1.1 참조)하지 문자열 리터럴 필요하다.


스트링은 인접하여 종결 자 서열 및 제 널 문자 포함한다.

그래서 문자열 리터럴은 예를 "a\0b" 또는 "\0ab"을 위해, 또한 중간에 또는 시작 부분에 \0가있을 수 있습니다. 나는 이것이 각주가 말하는 것이라고 생각한다.

문자 상수는 가능한 프리픽스 L/u/U와 따옴표의 C-문자 시퀀스 (보통 단일 문자)이다.

정수 문자 상수

'x'에서와 같이 작은 따옴표에 동봉 된 하나 개 이상의 멀티 바이트 문자의 순서입니다. 넓은 문자 상수는 글자 L, u 또는 U 접두사를 제외하고는 동일합니다.

그래서 용어는 매우 대칭 적이 지 않습니다. IMO. 예 : 와이드 문자 상수는 이고 문자 상수의 특정 경우는입니다. 그러나 문자 문자열 리터럴 및 넓은 문자열 리터럴 문자열 리터럴에 속합니다.

+0

밑줄을 그어 놓은 것처럼 보입니다. 희망을 바로 잡았습니다. –

+0

@MadPhysicist 감사합니다! 나는 우리가 동시에 편집하고 있다고 생각한다.) – AlexD

+0

그래서 내부의 null 문자를 포함하는 문자 문자열 리터럴도 null 문자로 끝납니다. – Sabrina