안녕하세요, 꼬맹입니다.
표준 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보다 크거나 같다면 출력 문자열이 잘린 것입니다. 이를 처리하는 것은 호출자의 책임입니다.
댓글