>  기사  >  백엔드 개발  >  C에서 두 문자열 리터럴을 직접 연결할 수 있습니까?

C에서 두 문자열 리터럴을 직접 연결할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-24 08:48:29361검색

Can You Concatenate Two String Literals Directly in C  ?

문자열 리터럴 연결

C에서는 연산자를 사용하여 문자열을 연결할 수 있습니다. 그러나 문자열 리터럴을 연결할 때 따라야 할 특정 규칙이 있습니다.

문자열 정의의 유효성

다음 코드는 두 개의 문자열 변수를 정의합니다.

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>

연결되는 두 문자열 중 하나가 std::string 개체(hello)이기 때문에 이 코드는 유효합니다. 연산자는 hello와 ",world"의 연결을 먼저 평가하여 std::string 객체를 생성합니다. 그런 다음 이 개체는 "!"으로 연결됩니다.

그러나 다음 코드는 유효하지 않습니다.

<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>

가장 왼쪽에서 연결되는 두 문자열은 모두 문자열 리터럴(" 안녕하세요' 및 ',world'). 연산자는 두 문자열 리터럴을 직접 연결하는 데 사용할 수 없습니다.

연산자의 왼쪽에서 오른쪽 연관성

C의 연산자는 왼쪽에서 오른쪽 연관성을 갖습니다. 즉, 두 번째 예제 코드에 해당하는 괄호 안에 있는 표현식은 다음과 같습니다.

<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>

보시다시피 두 문자열 리터럴 "Hello"와 ",world"가 먼저 연결되어 컴파일 시간이 발생합니다. error.

제한 극복

이 제한을 극복하는 방법에는 여러 가지가 있습니다.

  1. std::string 사용 개체:
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
  1. 괄호 안에 식:
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>

제한 이유

두 문자열 리터럴을 직접 연결할 수 없다는 제한은 문자열 리터럴이 문자 배열(const char [N], 여기서 N은 문자열 길이에 1을 더한 값, 널 종결자). 대부분의 컨텍스트에서 배열을 사용하면 초기 요소에 대한 포인터로 변환됩니다.

따라서 를 사용하여 두 개의 문자열 리터럴을 연결하려고 하면 두 개의 const char* 포인터를 함께 추가하려는 효과가 있습니다. . 두 개의 포인터를 추가하는 것은 문자열 연결의 맥락에서 의미가 없기 때문에 불가능합니다.

위 내용은 C에서 두 문자열 리터럴을 직접 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.