Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 strcpy() 함수로 두 문자열 교환하는 방법

C 프로그래밍에서 두 문자열의 위치를 서로 바꿀 때는 strcpy() 함수를 사용합니다. 문자 배열(character array), 즉 문자들이 모여 이루어진 집합을 문자열(string)이라고 부릅니다.

문자열 선언

문자열 배열을 선언하는 기본 문법은 다음과 같습니다.

char stringname[size];

예를 들어 char string[50];은 최대 50자를 저장할 수 있는 문자열을 의미합니다.

문자열 초기화

문자열은 두 가지 방식으로 초기화할 수 있습니다.

1. 단일 문자 상수 사용

char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };

2. 문자열 상수 사용

char string[10] = "Hello";

문자열 접근

제어 문자 %s를 사용하면 널 문자('\0')를 만날 때까지 문자열 전체를 한 번에 입력하거나 출력할 수 있습니다.

strcpy() 함수란?

strcpy() 함수는 원본(source) 문자열을 대상(destination) 문자열에 복사하는 함수입니다. 이때 대상 문자열의 길이는 반드시 원본 문자열의 길이보다 크거나 같아야 합니다.

함수의 기본 문법은 다음과 같습니다.

strcpy(대상 문자열, 원본 문자열);

인자의 순서에 주의해야 합니다. 첫 번째 인자는 복사받을 곳, 두 번째 인자는 복사할 내용입니다.

char a[50];

strcpy("Hello", a);  // 오류 발생 - 인자 순서가 잘못됨
strcpy(a, "Hello");  // 정상 실행 - a = "Hello"

두 문자열을 교환하는 C 프로그램

다음은 임시 변수 s3를 활용하고 strcpy() 함수를 호출하여 두 문자열의 값을 서로 맞바꾸는 완전한 C 프로그램입니다.

#include<stdio.h>
#include<string.h>
main(){
    char s1[10],s2[10],s3[10];
    printf("Enter String 1\n");
    gets(s1);
    printf("Enter String 2\n");
    gets(s2);
    printf("Before Swapping\n");
    printf("String 1 : %s\n",s1);
    printf("String 2 : %s\n",s2);
    strcpy(s3,s1);
    strcpy(s1,s2);
    strcpy(s2,s3);
    printf("After Swapping:\n");
    printf("String 1 : %s\n",s1);
    printf("String 2 : %s\n",s2);
}

실행 결과

위 프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.

Enter String 1
Tutorial
Enter String 2
Point
Before Swapping
String 1: Tutorial
String 2: Point
After Swapping:
String 1: Point
String 2: Tutorial

동작 원리 정리

교환 과정은 세 단계로 이루어집니다.

  • 1단계: strcpy(s3, s1) — 첫 번째 문자열을 임시 변수 s3에 백업합니다.
  • 2단계: strcpy(s1, s2) — 두 번째 문자열을 첫 번째 변수에 복사합니다.
  • 3단계: strcpy(s2, s3) — 백업해 둔 값을 두 번째 변수에 복사합니다.

이는 일반 변수 교환 시 임시 변수를 사용하는 것과 동일한 논리입니다.

참고: gets() 함수의 보안 문제

위 예제에서 사용된 gets() 함수는 입력 길이를 제한하지 못해 버퍼 오버플로우 위험이 있어 현재는 표준에서 제거되었습니다. 실무에서는 안전성이 검증된 fgets() 사용을 권장합니다.

fgets(s1, sizeof(s1), stdin);