it-swarm.dev

큰 따옴표를 문자열 리터럴로 얻는 방법은 무엇입니까?

printf() 문을 사용하여 다음과 같은 출력을 만들었습니다.

printf("She said time flies like an arrow, but fruit flies like a banana.");

그러나 실제 인용 부호를 큰 따옴표로 묶고 싶습니다.

그녀는 "화살표처럼 날아가지만 과일은 바나나처럼 날아간다"고 말했다.

printf() 문에서 문자열 리터럴을 감싸는 데 사용되는 큰 따옴표를 방해하지 않습니다.

어떻게해야합니까?

18
kevthanewversi

백 슬래시로 따옴표를 이스케이프하십시오.

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

문자열 리터럴에 사용할 수있는 특수 이스케이프 문자 가 있으며이 문자는 선행 백 슬래시로 표시됩니다.

54
Mark Byers

고맙게도 C++ 11에는 원시 문자열 리터럴을 사용하는 더 즐거운 방법이 있습니다.

printf("She said \"time flies like an arrow, but fruit flies like a banana\".");

된다 :

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");

여는 인용 부호 뒤에 그리고 닫는 인용 부호 앞에 대괄호를 추가하는 경우, 최대 16 자의 조합이 가능하므로 문자열 자체에 조합이있는 상황을 피할 수 있습니다. 구체적으로 특별히:

공백, 왼쪽 괄호 (, 오른쪽 괄호), 백 슬래시\및 가로 탭, 세로 탭, 용지 공급 및 줄 바꾸기를 나타내는 제어 문자를 제외한 기본 소스 문자 세트의 모든 구성원 "(N3936 §2.14.5 [ Lex.string] 문법) 및 "최대 16 자"(§2.14.5/2)

이 사소한 문장이 얼마나 분명한지는 논쟁의 여지가 있지만 HTML이나 JSON과 같은 형식의 문자열에 사용될 때는 의심 할 여지없이 훨씬 명확합니다.

13
pjcard