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);