수수께끼: C의 문자열 및 문자 연결 수수께끼
C에서 문자열 리터럴을 문자 리터럴과 연결하려고 하면 예상치 못한 동작이 발생함 발생할 수 있습니다. 다음 코드를 고려해보세요.
<code class="cpp">string str = "ab" + 'c'; cout << str << endl;</code>
흥미롭게도 이 줄의 결과는 "abc"입니다. 이 수수께끼를 풀려면 기본 작업을 이해하는 것이 중요합니다.
내부적으로 컴파일러는 문자열 리터럴 "ab"를 C 스타일 문자열로 해석하고 문자 리터럴 'c'를 정수 값으로 해석합니다. 이러한 유형에 대해 문자열 연결이 정의되지 않았으므로 컴파일러는 문자열 리터럴의 주소에 정수 값 'c'를 추가합니다.
이러한 조작은 문자열에 할당된 메모리를 초과하므로 예측할 수 없는 결과를 초래할 수 있습니다. . 결과적으로 프로그램은 null 문자가 나타날 때까지 결과 주소의 문자를 인쇄할 수 있습니다.
이 문제를 해결하려면 몇 가지 접근 방식을 취할 수 있습니다. 먼저, 캐스트를 사용하여 문자 리터럴을 문자열로 명시적으로 변환할 수 있습니다.
<code class="cpp">string str = std::string("ab") + 'c';</code>
또는 직관적인 연결을 수행하는 문자열 연결 연산자를 사용할 수 있습니다.
<code class="cpp">string str = "ab"; str += 'c';</code>
두 번째 경우에는 원활한 연결을 위해 문자열 클래스의 오버로드된 연산자 메서드가 활용됩니다.
위 내용은 ## C에서 문자열 리터럴과 문자 리터럴을 연결하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!