본문 바로가기
Study (etc)/C

[문자열 함수] 문자열 복사, 덧붙이기

by Haren 2019. 2. 13.

이번에도 문자열 함수를 이용한 예제이다.


윤성우 저 '열혈 C 프로그래밍' 교재의 문제 21-2 [문자열 처리]의 문제를 해결해보았다.


시작하기 전에 간단하게 문자열 함수들을 정리해보겠다.






문자열 길이 반환 


strlen


size_t strlen (const char * s); 의 형태로 사용한다. 여기에서 size_t 선언은 unsigned int의 선언과 완전히 동일하다.


ex) 문자열 배열 변수 str의 문자열 길이를 구하기 위해서는 strlen(str)의 형태로 사용할 수 있다.


문자열 복사


strcpy, strncpy


char * strcpy(char * dest, const char * src);

char * strncpy(char * dest, const char * src, size_t n);


strcpy의 경우 dest에 src의 문자열을 복사한다.


strncpy의 경우 문자열 배열의 크기를 함께 넣어주어야 한다.


ex ) 배열의 크기가 정해지지 않은 배열 str3에 배열 str1의 문자열을 복사하고자 할 때 strncpy(str3, str1, sizeof(str3));의 형태로 사용한다.


문자열 덧붙이기


strcat, strncat


char * strcat(char *  dest, const char * src);

char * strncat(char * dest, const char * src, size_t n);


strcat의 경우 dest에 src의 문자열을 덧붙인다. 

strncat의 경우 dest의 사이즈를 함께 전달해야 한다.


strcat함수를 호출할 경우, 널 문자가 저장된 위치에서부터 덧붙이게 된다.



문자열 비교


strcmp, strncmp


int strcmp(const char * s1, const char * s2);

int strncmp(const char *s1, const char * s2, size_t n);


역시 n이 들어간 함수의 경우 문자열의 사이즈를 함께 전달하여야만 한다.

두 문자열의 내용이 같으면 0, 그렇지 않으면 0이 아닌 값을 전달한다.

양수 혹은 음수를 전달하나 이는 크게 중요치 않다.



이 문제에서는 복사 함수 strcpy와 덧붙임 함수 stract를 사용할 예정이다.



문제


다음과 같이 총 3개의 배열을 선언한다.

char str1[20];

char str2[20];

char str3 [40];


그리고는 str1과 str2를 통해서 프로그램 사용자로부터 문자열을 입력 받되, fgets 함수호출을 통해서 입력 받는다. 이어서 str1에 저장된 문자열을 str3에 복사하고, str2에 저장된 문자열을 str3에 저장된 문자열의 뒤에 덧붙이자. 그리고 마지막으로 str3에 저장된 문자열을 출력하자.


이 문제에서 주의해야 할 점은 fgets 함수 호출 시 자동으로 따라붙는 개행 문자 (\n)을 제거하는 것이다.

이 부분은 따로 함수를 만들어 해결하였다.


소스코드

#include <stdio.h> #include <stdlib.h> #include <string.h> void RemoveBSN(char str[]) { int len=strlen(str); str[len-1]='\0'; //개행 문자가 들어간 곳을 NULL로 바꿔줌. } int main() { char str1[20]; char str2[20]; char str3[40]; printf("input 1st string : "); fgets(str1,sizeof(str1),stdin); RemoveBSN(str1); printf("input 2nd string : "); fgets(str2,sizeof(str2),stdin); RemoveBSN(str2); strcpy(str3,str1); strcat(str3,str2); printf("combination result : %s \n",str3); return 0; }


실행 결과