man page에 검색해 보자.
소속 헤더파일:
#include <string.h>
함수 프로토타입:
size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize);
/* dst는 복사한 것을 붙여넣을 문자열, src는 복사되는 문자열, dstsize는 붙여넣고 난 후의 dst 길이 */
size_t strlcat(char * restrict dst, const char *restrict src, size_t dstsize);
/* dst는 원래 문자열, src는 추가되는 문자열, dstsize는 추가하고 난 후의 dst 길이 */
함수 설명:
The strlcpy() and strlcat() function copy and concatenate strings with the same input parameters and output result as snprintf(3). They are designed to be safer, more consistent, and less error prone replacements for the easily misused functions strncpy() and strncat().
strlcpy()와 strlcat() 함수는 snprintf()함수와 똑같은 입력 파라미터와 출력 결과를 가진다. 두 함수는 strncpy()와 strncat()을 대체하는 더 안전하고 일관적이며 오류 발생이 적은 함수다.
(결론: strncpy() 쓰지 말고 strlcpy()쓰자.)
strlcpy() copies up to dstsize - 1 characters from the string src to dst, NULL-terminating the result if dstsize is not 0.
strlcpy()는 dstsize - 1 개의 글자를 src에서 가져와 dst로 복사한다. 또한 dstsize가 0이 아닌 이상 '\0' 널 문자로 종결시켜야 한다.
strlcat() appends string src to the end of dst. It will append at most dstsize - strlen(dst) - 1 characters. It will then NULL-terminate, unless dstsize is 0 or the original dst string was longer than dstsize (in practice this should not happend as it means that either dstsize is incorrect or that dst is not a proper string).
strlcat()은 dst 문자열 끝에 src을 붙인다. 최대 dstsize - dst길이 - 1 만큼 붙일 수 있다. dstsize가 0 이거나 원래 dst 문자열이 dstsize보다 긴 경우가 아니라면 '\0'을 붙여 NULL-terminate 시켜야 한다.
리턴 값:
Like snprintf(3), the strlcpy() and srlcat() functions return the total length of the string they tried to create. For strlcpy() that means the length of src. For strlcat() that means the initial length of dst plus the length of src.
snprintf()함수와 같이 strlcpy()와 strlcat() 함수는 실제로 만드려고 했던 문자열의 전체 길이를 리턴 값으로 가진다.
strlcpy()에 있어서는 src의 길이가 될 것이다.
strlcat()에 있어서는 dst의 원래 길이 + src의 길이가 될 것이다. (단, dstsize 가 기존 dst의 길이보다 작다면, dstsize + src의 길이를 반환한다.)
'CS 지식 > C, C++' 카테고리의 다른 글
[C] write 함수 (0) | 2023.01.20 |
---|---|
[C] strstr 함수 (0) | 2023.01.20 |
[C] strcat, strncat 함수 (0) | 2023.01.20 |
[C] strcmp, strncmp 함수 (0) | 2023.01.19 |
[C] strcpy, strncpy 함수 (0) | 2023.01.19 |