C언어에서 문자열을 char 형식을 원소로 하는 배열이나 포인터를 사용하죠.
특히 문자열을 변경하는 작업을 하려면 배열을 사용한다고 했어요.
그런데 C언어에서 배열 이름은 포인터 상수로 취급하여 대입 연산 좌항에 올 수 없어요.
C 언어에서 문자열 데이터를 복사할 때는 다음 함수를 사용할 수 있어요.
char *strcpy(char *dest, const char *src);
char *strcpy(char *dest,
size_t size, const char *src);
char *strncpy(char *dest, const char *src,
size_t n);
char *strncpy(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(name3,sizeof(name3),name1,3);
printf("%s\n",name3);
return 0;
}
◈ 실행 결과
hello
hel
strncpy 함수를 사용하면 복사한 문자 뒤에 널문자를 대입해 주지 않아요.
이러한 이유로 초기화하지 않고 사용하면 쓰레기 값이 남아있을 수 있으므로 주의하세요.
이 외에도 문자열을 사용하기 위한 다양한 함수들을 제공하고 있어요.
C언어 표준 라이브러리 함수를 참고하세요.
[C 언어 표준 라이브러리 함수 가이드]는 C언어 표준 라이브러리 함수에 관한 사용법을 다루고 있습니다.
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 77. 사용자 정의 형식 실습 - 시나리오 (0) | 2016.04.17 |
---|---|
[C언어] 76. 열거형 (0) | 2016.04.17 |
[C언어] 75. 공용체 (0) | 2016.04.17 |
[C언어] 74. 구조체 (0) | 2016.04.17 |
[C언어] 73. 문자열 정리하기 (0) | 2016.04.17 |
[C언어] 71. 문자열 비교와 strcmp 함수 (0) | 2016.04.17 |
[C언어] 70. 문자열 길이와 strlen 함수 (0) | 2016.04.17 |
[C언어] 69. 문자열 사용 기초 (0) | 2016.04.17 |
[C언어] 68. 문자열 (0) | 2016.04.17 |
67. 정리하기 (0) | 2016.01.01 |