strncpy
자 오늘은 문자열의 일부분만 떼내어 다른 문자열 버퍼에 복사하는 strncpy에 대해 알아보도록 하겠습니다.
일부분을 뗀다는 말은 무슨 말일까요?
우리가 이전에 배웠던 strcpy는 문자열 끝 0이 나올 때까지 전체 문자열을 복사하는 함수였습니다.
그런데 오늘은 한 문자열이 있다면 이중 3글자만 떼내어 복사하는 함수에 대해 알아봅니다.
strncpy는 글자를 복사한 후 결과물의 마지막에 0을 추가하여 정상적인 문자열을 만들어줍니다.
이제 strncpy 함수원형을 알아보겠습니다.
strncpy 함수 원형은?
strncpy 함수는 <string.h> 헤더 파일에 선언되어 있으며, 다음과 같은 원형을 갖습니다
char *strncpy(char *dest, const char *src, size_t n);
strncpy 인자는?
strncpy 함수는 세 개의 인자를 가집니다. 한번 알아보겠습니다.
dest: 대상 문자열의 시작 주소를 가리키는 포인터
src: 복사할 소스 문자열의 시작 주소를 가리키는 포인터
n: 복사할 최대 문자 개수를 나타냅니다.
strncpy 함수는 대상 문자열의 시작 주소를 반환합니다.
strcpy에서는 n인자가 없었지만 이번 strncpy에서는 이 n의 인자가 다시 등장하였습니다.
왜냐하면 몇 글자만 떼서 복사할 것인지 정해야하기때문입니다.
strncpy 언제 사용하나?
strncpy 함수는 소스 문자열의 일부분을 대상 문자열로 복사해야 할 때 사용됩니다.
특정 문자 개수만큼의 문자열을 복사하거나, 대상 문자열의 일부분을 새로운 값으로 설정하고자 할 때 strncpy 함수를 사용할 수 있습니다.
단, 복사할 최대 문자 개수를 지정하여 문자열의 크기를 제한할 수 있습니다.
strncpy 정해진 문자 개수만큼 기존 문자열 뒤에 복사하기 예제
다음은 strncpy 함수를 사용하여 정해진 문자 개수만큼 기존 문자열 뒤에 복사하는 예제입니다.
#include <stdio.h>
#include <string.h>
int main() {
char d[20] = "Hello";
char s[] = "World!";
strncpy(d + strlen(d), s, 5);
d[14] = '\0'; // 복사 후 NULL 문자 수동 추가
printf("%s\n", d);
return 0;
}
위의 예제에서는 src 문자열의 처음 5개의 문자를 strncpy 함수를 사용하여 d 문자열의 끝에 복사합니다.
strlen 함수를 통해 d 문자열의 끝 위치를 찾고, d + strlen(d)로 이동하여 s 문자열의 일부분을 복사합니다.
복사 후 NULL 문자를 수동으로 추가하여 문자열의 끝을 표시합니다.
결과적으로 d 문자열에는 "HelloWorld"가 출력되며, 최대 14개의 문자를 허용하므로 "!"은 복사되지 않습니다.
strncpy 정해진 문자 개수만큼 두 문자열을 기존 문자열 뒤에 이어 붙이기 예제
다음은 strncpy 함수를 사용하여 정해진 문자 개수만큼 두 문자열을 기존 문자열 뒤에 이어 붙이는 예제입니다
#include <stdio.h>
#include <string.h>
int main() {
char d[20] = "Hello";
char s[] = "World!";
strncpy(d + strlen(d), " ", 1);
strncpy(d + strlen(d), s, 6);
d[14] = '\0'; // 복사 후 NULL 문자 수동 추가
printf("%s\n", d);
return 0;
}
위의 예제에서는 먼저 공백 문자를 strncpy 함수를 사용하여 dest 문자열의 끝에 복사합니다.
그런 다음 src 문자열의 처음 6개의 문자를 strncpy 함수를 사용하여 dest 문자열의 끝에 복사합니다.
복사 후 NULL 문자를 수동으로 추가하여 문자열의 끝을 표시합니다.
결과적으로 dest 문자열에는 "Hello World"가 출력되며, 최대 14개의 문자를 허용하므로 "!"은 복사되지 않습니다.
이처럼 strcpy보다 조금 더 정밀하게 문자열을 제어할 수 있는 함수는 strncpy라는 것을 확인할 수 있었습니다.