C++ 문자열 함수: strcpy(), strcat(), strlen(), strcmp()

⚡ 스마트 요약

C++ strcpy, strcat, strlen, strcmp와 같은 문자열 함수는 프로그램이 텍스트를 복사, 병합, 측정 및 비교할 수 있도록 해줍니다. 이 자료에서는 문자열이란 무엇인지, C 스타일 문자열과 std::string 문자열을 선언하는 방법, 문자열 값에 접근하는 방법, 그리고 핵심 문자열 함수를 예제와 함께 적용하는 방법을 설명합니다.

  • 🔤 핵심 정의: 문자열은 문자의 연속입니다. C++ `string`은 `std::string` 클래스의 객체입니다.
  • 🧱 두 가지 선언: C++ '\0'으로 끝나는 C 스타일 문자 배열과 더 안전한 std::string 클래스 형식을 지원합니다.
  • 📥 값에 접근하기: 문자열은 이름으로 읽고 출력하며, 문자 배열과 std::string을 모두 사용하여 이를 보여줍니다.
  • 🛠️ 문자열 함수: strcpy는 문자열을 복사하고, strcat은 문자열을 연결하고, strlen은 길이를 측정하고, strcmp는 두 문자열을 비교합니다.
  • 📦 헤더 필수: C 언어의 문자열 함수는 cstring 헤더 파일에 있으며, 사용하기 전에 해당 헤더 파일을 포함해야 합니다.

C++ 문자열 함수

문자열이란 무엇입니까?

문자열은 일련의 문자입니다. 에이 C++ `string`은 `std::string` 클래스의 객체입니다. 문자는 바이트 시퀀스로 저장되며, 단일 문자 바이트에 대한 접근만 허용됩니다.

C++ 문자열은 메모리를 동적으로 할당합니다. 필요에 따라 런타임 중에 문자열에 더 많은 메모리를 할당할 수 있습니다. 메모리 사전 할당이 없으므로 메모리 낭비가 없습니다. 문자열에 대해서는 비교, 연결, 변환 등 다양한 연산을 수행할 수 있습니다.

문자열 선언

C++ 두 가지 유형의 문자열 선언을 지원합니다.

  • C 스타일 문자열
  • 문자열 클래스 유형

C 스타일 문자열

이러한 유형의 문자열 선언은 다음에 도입되었습니다. C 프로그래밍 언어. C++ 계속해서 지원합니다. 이는 단순히 널 문자(\0)로 끝나는 1차원 문자 배열입니다. 널 종료 문자열은 문자열을 구성하는 문자 뒤에 널 문자가 오는 형태입니다.

아래 주어진 문자열 선언을 고려하십시오.

char name[5] = {'J', 'o', 'h', 'n', '\0'};

위 선언은 "John"이라는 단어를 구성하는 문자열을 생성합니다. 이 단어는 4개의 문자로 이루어져 있지만, 문자열의 크기는 5입니다. 추가 공간은 널 문자를 저장하기 위한 것입니다.

배열 초기화 규칙을 사용하여 위의 명령문을 다음과 같이 작성할 수 있습니다.

char name[] = "John";

참고로, 문자열 상수의 끝에 널 문자를 배치할 필요는 없습니다. C++ 컴파일러는 배열을 초기화할 때 문자열 끝에 '\0'을 자동으로 배치합니다.

표준::문자열

표준 C++ 이 라이브러리는 다양한 문자열 연산을 지원하는 문자열 클래스를 제공합니다. 이 클래스는 std::string으로 작성됩니다.

이 클래스를 사용하려면 먼저 아래와 같이 `#include` 전처리기를 사용하여 작업 공간에 포함시켜야 합니다.

#include <string>

다음으로 string 키워드를 사용하여 문자열을 선언할 수 있습니다. 예를 들어:

string name = "John";

위의 명령문은 John 값을 보유하기 위해 name이라는 문자열을 생성합니다.

문자열 값에 액세스

In C++, 문자열 이름을 사용하여 문자열 값에 액세스할 수 있습니다. 예를 들어:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

출력:

문자열 값에 액세스

다음은 코드의 스크린샷입니다.

문자열 값에 액세스

Code 설명 :

  1. 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
  2. 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
  3. 프로그램의 로직을 구현할 main() 함수를 호출합니다. 중괄호({)는 main() 함수의 본문 시작을 나타냅니다.
  4. 문자열을 선언하고 name이라는 이름을 지정합니다. 문자열은 John 값을 저장합니다. 추가 공간에는 널 문자가 저장됩니다.
  5. 콘솔에 일부 텍스트를 인쇄합니다.
  6. 콘솔에 name이라는 문자열 값을 인쇄합니다.
  7. 프로그램이 정상적으로 실행되면 main() 함수는 값을 반환해야 합니다.
  8. main() 함수 본문의 끝입니다.

다음은 C++ 표준 문자열 클래스:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

출력:

문자열 값에 액세스

다음은 코드의 스크린샷입니다.

문자열 값에 액세스

Code 설명 :

  1. 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
  2. 코드에 표준 문자열 클래스를 포함합니다.
  3. 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
  4. 프로그램의 로직을 구현할 main() 함수를 호출합니다. 중괄호({)는 main() 함수의 본문 시작을 나타냅니다.
  5. 문자열 변수를 선언하고 name이라는 이름을 지정합니다. 이 문자열에는 값이 저장됩니다. Guru99.
  6. 콘솔의 일부 텍스트와 함께 문자열 이름 값을 인쇄합니다.
  7. 프로그램이 정상적으로 실행되면 main() 함수는 값을 반환해야 합니다.
  8. main() 함수 본문의 끝입니다.

문자열 함수 C++

문자열을 조작하고 싶을 때가 많습니다. C++ 이를 위해 사용할 수 있는 다양한 기능을 제공합니다. 이러한 기능은 다음과 같이 정의됩니다. 헤더 파일이 있으므로 해당 함수를 사용하려면 코드에 포함시켜야 합니다. 몇 가지 예를 살펴보겠습니다.

strcpy ()

문자열 복사 기능입니다. 한 문자열을 다른 문자열로 복사합니다.

구문 :

strcpy(string1, string2);

함수의 두 매개변수인 string1과 string2는 문자열입니다. 이 함수는 string2의 내용을 string1에 복사합니다.

strcat()

문자열 연결 기능입니다. 문자열을 연결합니다.

구문 :

strcat(string1, string2);

함수의 두 매개변수인 string1과 string2는 연결할 문자열입니다. 위 함수는 문자열 string2를 문자열 string1의 끝에 연결합니다.

strlen ()

문자열 길이 함수입니다. 인수로 전달된 문자열의 길이를 반환합니다.

구문 :

strlen(string1);

string1 매개변수는 길이를 결정할 문자열의 이름입니다. 위 함수는 문자열 string1의 길이를 반환합니다.

strcmp()

문자열 비교 기능입니다. 문자열 비교에 사용됩니다.

구문 :

strcmp(string1, string2);

위 함수는 문자열 string1과 string2가 유사하면 0을 반환하고, string1이 string2보다 작으면 0보다 작은 값을 반환하며, string1이 string2보다 크면 0보다 큰 값을 반환합니다.

예:

다음 예제에서는 위의 문자열 함수를 사용하는 방법을 보여줍니다.

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

출력:

문자열 함수 C++

다음은 코드의 스크린샷입니다.

문자열 함수 C++

Code 설명 :

  1. 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
  2. 표준을 포함하여 코드의 헤더 부분입니다.
  3. 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
  4. 프로그램의 로직을 구현할 main() 함수를 호출합니다. 중괄호({)는 main() 함수의 본문 시작을 나타냅니다.
  5. 10자리의 문자열을 선언하고 name1이라는 이름을 지정합니다. 이 문자열에는 값이 저장됩니다. Guru99.
  6. 10자로 구성된 문자열을 선언하고 이름을 name2로 지정합니다. 문자열은 John 값을 저장합니다.
  7. 10자로 구성된 문자열을 선언하고 이름을 name3으로 지정합니다.
  8. 선언 정수변수 렌이라는 이름을 가진 사람.
  9. 문자열 name1을 문자열 name3에 복사합니다.
  10. 문자열 'name3'의 값과 일부 텍스트를 콘솔에 출력합니다. 출력 결과는 다음과 같아야 합니다. Guru99.
  11. 문자열 name2를 문자열 name1의 끝에 연결합니다. 이제 name1의 값은 다음과 같습니다. Guru99존.
  12. 문자열 'name1'의 값과 일부 텍스트를 콘솔에 출력합니다. 출력 결과는 다음과 같아야 합니다. Guru99존.
  13. name1이라는 이름의 문자열 길이를 구하고, 그 길이 값을 len 변수에 할당합니다.
  14. len 변수의 값을 다른 텍스트와 함께 콘솔에 출력합니다.
  15. 프로그램이 정상적으로 실행되면 main() 함수는 값을 반환해야 합니다.
  16. main() 함수 본문의 끝입니다.

자주 묻는 질문

네. AI 비서는 문자 배열을 std::string으로 리팩토링하고, 관련 함수를 업데이트하며, 안전성 향상 효과를 설명할 수 있습니다. 하지만 개발자는 예외 상황, 버퍼 크기, 의도된 동작 방식 등을 고려하여 변경 사항을 검토해야 합니다.

네. AI 도구는 예제 코드를 생성하고, strcpy와 strcat의 동작 방식을 설명하며, 버퍼 오버플로우 위험을 알려줍니다. 이는 이해도를 높여주지만, 코드를 직접 실행하여 동작을 확인하는 것이 가장 좋은 방법입니다.

`std::string`은 메모리를 동적으로 관리하며 문자열 연결 및 비교와 같은 내장 연산을 제공합니다. C 스타일 문자열은 `\0`으로 끝나는 고정된 문자 배열이므로 수동 메모리 관리가 필요하고 오류 발생 가능성이 더 높습니다.

대상 배열의 크기가 너무 작으면 버퍼 오버플로가 발생할 수 있습니다. 더 안전한 대안으로는 strncpy, strncat을 사용하거나 메모리를 자동으로 관리하고 이러한 위험을 줄이는 std::string 연산을 사용하는 것이 있습니다.

이 게시물을 요약하면 다음과 같습니다.