본문 바로가기
language(개발언어)

[C언어] string.h 포함 함수 정리 (strcmp, strncmp, strcat, strncat, strstr, strlcat)

by kkomaeng 2022. 2. 15.

안녕하세요, 꼬맹입니다.

표준 c 라이브러리에 있는 string.h에 포함된 함수를 정리하고자 합니다. ISO C90 manual을 참고했습니다.


1. strcmp

 

int strcmp(const char *s1, const char *s2);

 

설명

이 함수는 널 문자로 종료되는 문자열 s1 s2를 비교합니다.

 

리턴 값

이 함수는 문자 *s1이 *s2보다 크면 양의 정수를, 작으면 음의 정수를, 같으면 0을 반환합니다.

* unsigned char 형으로 비교합니다.

* 윈도우 운영체제에서는 -1, 0, 1을 반환하지만 리눅스 등의 운영체제는 *s1-*s2를 반환합니다.

 

2. strncmp

 

int strncmp(const char *s1, const char *s2, size_t n);

 

설명

이 함수는 n개 까지의 문자만 비교합니다.

널 문자 이후에 나타나는 이진 데이터는 비교하지 않고 문자열만 비교합니다.

 

리턴 값

이 함수는 문자 *s1이 *s2보다 크면 양의 정수를, 작으면 음의 정수를, 같으면 0을 반환합니다.

* unsigned char 형으로 비교합니다.

* 윈도우 운영체제에서는 -1, 0, 1을 반환하지만 리눅스 등의 운영체제는 *s1-*s2를 반환합니다.

 

3. strcat

 

char *strcat(char *restrict s1, const char *restrict s2);

 

설명

널 문자로 종료되는 s2 문자열을 복사하여 널 문자로 종료되는 문자열 s1에 추가합니다.

그리고 마지막에 널 문자를 추가합니다.

문자열 s1은 결과 값을 넣을 수 있도록 반드시 충분한 공간을 가지고 있어야 합니다.

 

리턴 값

s1의 포인터를 반환합니다.

 

고려사항

이 함수는 쉽게 오버플로우를 불러 일으킬 수 있으니 strncat strlcat를 사용하세요.

 

4. strncat

 

char *strcat(char *restrict s1, const char *restrict s2, size_t n);

 

설명

널 문자로 종료되는 s2 문자열에서 n만큼 복사하여 널 문자로 종료되는 문자열 s1에 추가합니다.

그리고 마지막에 널 문자를 추가합니다.

문자열 s1은 결과 값을 넣을 수 있도록 반드시 충분한 공간을 가지고 있어야 합니다.

 

리턴 값

s1의 포인터를 반환합니다.

 

5. strstr

 

char *strstr(const char *haystack, const char *needle);

 

설명

이 함수는 널 문자로 종료되는 문자열 haystack에서 널 문자로 종료되는 문자열 needle의 첫 발생 지점을 찾습니다.

한 마디로 needle이 haystack에 포함되어 있는지 찾습니다.

 

리턴 값

만약 needle이 빈 문자열이면 haystack을 반환합니다.

만약 needle이 haystack 어디에도 없다면 널을 반환합니다.

하지만 haystack에서 찾았다면 needle이 처음 나타나는 첫 문자의 포인터를 반환합니다.

 

6. strlcat

 

size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize);

 

설명

이 함수는 문자열을 복사하고 연결합니다.

대상 버퍼의 전체 크기를 사용하고 공간이 있는 경우 널 문자 종료를 보장합니다.

dstsize는 결과의 전체 길이이며 마지막 널 문자를 위한 크기가 포함되어야 합니다.

문자열 src를 dst의 끝에 최대 (dstsize - strlen(dst) - 1) 만큼 추가합니다. 

dstsize가 0이거나 원래 dst 문자열이 dstsize보다 길지 않는 한 널 문자로 종료합니다.

 

리턴 값

생성하려는 문자열의 전체 길이를 반환합니다. dst의 초기 길이에 src의 길이를 더한 것을 의미합니다.

반환 값이 dstsize보다 크거나 같다면 출력 문자열이 잘린 것입니다. 이를 처리하는 것은 호출자의 책임입니다.

댓글