출처
http://ra2kstar.tistory.com/85
http://forum.falinux.com/zbxe/index.php?document_srl=413130&mid=C_LIB
http://forum.falinux.com/zbxe/index.php?document_srl=413133&mid=C_LIB
모두 string.h 파일에 포함되어 있다.
1. char* strcmp(const char* s1, const char* s2)
대소문자 구분하면서 두 개의 문자열 비교
첫 번째 문자부터 아스키 코드를 비교하여 같으면 0 반환
s1 비교문자 아스키 코드 > s2 비교문자 아스키 코드 이면 0보다 큰 값 반환
s1 비교문자 바이트 < s2 비교문자 바이트이면 0보다 작은 값 반환
윈도우에서는 단순히 1, 0, -1 값만 반환하는 반면
리눅스에서는 아스키 코드 차이 값을 반환한다.
2. char* strncmp(const char* s1, const char* s2, size_t n)
대소문자 구분하면서 두 개의 문자열의 처음 n개를 비교
strcmp()와 반환값은 동일하다.
3. char* stricmp(const char* s1, const char* s2)
대소문자 구분하지 않고 두 개의 문자열 비교
리눅스에서는 strcasecmp()라는 이름의 함수가 있는데 역할은 동일하다.
신기한 것은 여기서는 윈도우나 리눅스나 똑같이 아스키 코드 차이값을 반환한다는 것이다.
4. stricmp(const char* s1, const char* s2, size_t n)
대소문자 구분하지 않고 두 개의 문자열의 처음 n개를 비교
리눅스에서는 strncasecmp()라는 이름의 함수가 있는데 역할은 동일하다.
strcasecmp(), stricmp()의 경우처럼
윈도우나 리눅스나 똑같이 아스키 코드 차이값을 반환한다.
윈도우
#include <stdio.h> #include <string.h> int main() { char* sl = "sophie"; char* scl = "sop"; char* su = "SOPHIE"; char* scu = "SOP"; char* nl = "nicole"; printf("%s and %s, using strcmp() -> %d\n", sl, nl, strcmp(sl, nl)); printf("%s and %s, using strcmp() -> %d\n", nl, sl, strcmp(nl, sl)); printf("%s and %s, using strcmp() -> %d\n", sl, sl, strcmp(sl, sl)); printf("%s and %s, using strncmp() -> %d\n", sl, nl, strncmp(sl, nl, 3)); printf("%s and %s, using strncmp() -> %d\n", nl, sl, strncmp(nl, sl, 3)); printf("%s and %s, using strncmp() -> %d\n", sl, scl, strncmp(sl, scl, 3)); printf("%s and %s, using stricmp() -> %d\n", sl, nl, stricmp(sl, nl)); printf("%s and %s, using stricmp() -> %d\n", nl, sl, stricmp(nl, sl)); printf("%s and %s, using stricmp() -> %d\n", sl, su, stricmp(sl, su)); printf("%s and %s, using strnicmp() -> %d\n", sl, nl, strnicmp(sl, nl, 3)); printf("%s and %s, using strnicmp() -> %d\n", nl, sl, strnicmp(nl, sl, 3)); printf("%s and %s, using strnicmp() -> %d\n", sl, scu, strnicmp(sl, scu, 3)); return 0; }
리눅스
#include <stdio.h> #include <string.h> int main() { char* sl = "sophie"; char* scl = "sop"; char* su = "SOPHIE"; char* scu = "SOP"; char* nl = "nicole"; printf("%s and %s, using strcmp() -> %d\n", sl, nl, strcmp(sl, nl)); printf("%s and %s, using strcmp() -> %d\n", nl, sl, strcmp(nl, sl)); printf("%s and %s, using strcmp() -> %d\n", sl, sl, strcmp(sl, sl)); printf("%s and %s, using strncmp() -> %d\n", sl, nl, strncmp(sl, nl, 3)); printf("%s and %s, using strncmp() -> %d\n", nl, sl, strncmp(nl, sl, 3)); printf("%s and %s, using strncmp() -> %d\n", sl, scl, strncmp(sl, scl, 3)); printf("%s and %s, using strncmp() -> %d\n", sl, scl, strncmp(sl, scl, 3)); printf("%s and %s, using strcasecmp() -> %d\n", sl, nl, strcasecmp(sl, nl)); printf("%s and %s, using strcasecmp() -> %d\n", nl, sl, strcasecmp(nl, sl)); printf("%s and %s, using strcasecmp() -> %d\n", sl, su, strcasecmp(sl, su)); printf("%s and %s, using strncasecmp() -> %d\n", sl, nl, strncasecmp(sl, nl, 3)); printf("%s and %s, using strncasecmp() -> %d\n", nl, sl, strncasecmp(nl, sl, 3)); printf("%s and %s, using strncasecmp() -> %d\n", sl, scu, strncasecmp(sl, scu, 3)); return 0; }