일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 경주맛집
- 냉동만두 추천
- 푸라닭
- 치킨 신메뉴
- 서현역중식
- 수지 술집
- 순천맛집
- 대구동성로맛집
- 순천디저트
- 동성로맛집
- 편의점 추천
- 오뚜기 라면
- 서현 맛집
- CU 편의점 추천
- 황리단길맛집
- cu 편의점
- BBQ 신메뉴
- 분당맛집
- 분당 맛집
- 서현역맛집
- 편스토랑
- 용인맛집
- 마켓컬리 추천
- 황리단길기념품
- 편의점 신제품
- 황리단길디저트
- 수원 맛집
- CU편의점 추천
- 교촌치킨 신메뉴
- CU편의점
- Today
- Total
일상 메모장
strcpy 사용법 및 구현 - C 문자열 복사 본문
사용법
#include <string.h>
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
정의 (strcpy strncpy 차이점)
strcpy() 함수는 null byte 를 포함하는 src 문자열을 dest 버퍼에 복사합니다.
dest 와 src 의 메모리는 겹치지(오버랩)않아야 합니다. 그리고 dest 버퍼는 src문자열을
복사하기에 충분한 사이즈여야 합니다.
strncpy() 함수는 src 문자열을 n byte만큼 복사하는것을 제외하면 strcpy() 함수와 같습니다.
주의 : 만약 src 문자열에서 n byte 사이즈 안에 null byte 가 없다면 dest 문자열에도 null byte가
추가되지 않으므로 정상적인 문자열 처리가 불가능해지므로 주의하시기 바랍니다.
(아시다시피 문자열의 끝은 null byte로 구분하기 때문에)
그리고 str 의 문자열 크기가 n byte보다 작다면 strncpy() 함수는 dest 함수의 마지막에 추가로 n
byte 만큼 null byte 로 모두 초기화 합니다.
반환 값
strcpy()와 strncpy() 함수 모두 dest 의 포인터를 반환합니다.
strcpy() 와 strncpy() 구현 (실제 구현부)
/**
* strcpy - Copy a %NUL terminated string
* @dest: Where to copy the string to
* @src: Where to copy the string from
*/
char *strcpy(char *dest, const char *src)
{
char *tmp = dest;
/*
* src 가 null byte 일때까지 dest에 한자씩 복사한 후 리턴합니다.
*/
while ((*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
}
/**
* strncpy - Copy a length-limited, C-string
* @dest: Where to copy the string to
* @src: Where to copy the string from
* @count: The maximum number of bytes to copy
*
* The result is not %NUL-terminated if the source exceeds
* @count bytes.
*
* In the case where the length of @src is less than that of
* count, the remainder of @dest will be padded with %NUL.
*
*/
char *strncpy(char *dest, const char *src, size_t count)
{
char *tmp = dest;
while (count) {
/*
* src 가 null byte 일때까지 dest에 복사하고,
* 그 이후에는 src 값(현재 null byte)을 증가하지 않고 count 만큼
* dest 에 복사하므로 나머지 데이터가 count 만큼
* null byte 로 모두 초기화됩니다.
*/
if ((*tmp = *src) != 0)
src++;
tmp++;
count--;
}
return dest;
}
strcpy() 함수는 src 문자 한자씩 null byte 까지 dest 에 복사합니다.
strncpy() 함수는 src 문자 한자씩 null byte 까지 dest 에 복사한 후, 그 이후는
현재 src 문자를(null byte) 남은 카운트 만큼 dest 에 복사합니다.
예를 들어 char src[5] = "ab" 이고 char dest[5] = "cccc"; 이고
strncpy(dest, src, sizeof(src)); 을 실행하면 dest 의 메모리는 아래와 같이 복사됩니다.
dest 의 메모리에 "ab"를 복사하고 나서 그 뒤에 메모리값은 원래 있던 'c' 문자열이
사라지고 sizeof(src) 만큼 null 로 채워집니다.
0x0000 | 0x0001 | 0x0002 | 0x0003 | 0x0004 |
a | b | null | null | null |
예제
#include <string.h>
#include <stdio.h>
int main(void)
{
char src[32] = "Source string";
char dest[32] = "Destination string";
/* src 문자열을 dest 로 복사합니다. */
strcpy(dest, src);
printf( "After strcpy, Destination is \"%s\"\n", dest);
return 0;
}
결과값은
After strcpy, Destination is "Source string"
입니다.
'C 언어' 카테고리의 다른 글
clock_gettime 사용법 (리눅스 정밀한 시간 얻어오기) (1) | 2020.02.26 |
---|---|
pthread_create 사용법 및 예제 (2) | 2020.02.06 |
memcpy 사용법 및 구현 - C 메모리 복사 (2) | 2020.01.29 |
memmove 사용법 및 구현 - C 메모리 이동 (11) | 2020.01.29 |
strchr 사용법 및 구현 - C 문자열 처리 (0) | 2020.01.21 |