C언어에서 문자열을 char 형식을 원소로 하는 배열이나 포인터를 사용하죠.
특히 문자열을 변경하는 작업을 하려면 배열을 사용한다고 했어요.
그런데 C언어에서 배열 이름은 포인터 상수로 취급하여 대입 연산 좌항에 올 수 없어요.
C 언어에서 문자열 데이터를 복사할 때는 다음 함수를 사용할 수 있어요.
char *strcpy(char *dest, const char *src); char *strcpy_s(char *dest, size_t size, const char *src); char *strncpy(char *dest, const char *src, size_t n); char *strncpy_s(char *dest, size_t size, const char *src, size_t n);
입력 인자는 문자열을 복사할 주소와 원본 문자열을 받아요.
문자열을 복사하기 위해서 첫 번째 인자는 const 키워드가 없어요.
반환 형식은 char *로 첫 번째 인자 그대로 반환한답니다.
printf(“%s\n”, strcpy(name,”hello”));처럼 연쇄 작업을 할 수 있게 반환는 것으로 다른 특별한 의미는 없어요.
그리고 strcpy 함수와 strncpy 함수는 src가 가리키는 문자열의 길이나 복사할 길이 n이 dest 버퍼 크기보다 크면 버퍼 오버플로우 버그가 발생할 수 있어요.
strcpy_s와 strncpy_s는 dest 버퍼의 크기를 두 번째 입력 인자로 받아요.
dest 버퍼 크기를 받아 내부에서 버퍼 오버플로우 버그가 발생하지 않게 개선한 함수예요.
◈ 문자열 복사
#include <stdio.h> #include <string.h> #define MAX_NAME_LEN 50 int main() { char name1[MAX_NAME_LEN+1] = "hello"; char name2[MAX_NAME_LEN+1] = ""; char name3[MAX_NAME_LEN+1] = ""; strcpy_s(name2,sizeof(name2),name1); printf("%s\n",name2); strncpy_s(name3,sizeof(name3),name1,3); printf("%s\n",name3); return 0; }
◈ 실행 결과
hello hel
strncpy 함수를 사용하면 복사한 문자 뒤에 널문자를 대입해 주지 않아요.
이러한 이유로 초기화하지 않고 사용하면 쓰레기 값이 남아있을 수 있으므로 주의하세요.
이 외에도 문자열을 사용하기 위한 다양한 함수들을 제공하고 있어요.
C언어 표준 라이브러리 함수를 참고하세요.
[C 언어 표준 라이브러리 함수 가이드]는 C언어 표준 라이브러리 함수에 관한 사용법을 다루고 있습니다.