<string.h>와 <strings.h>의 차이점


91

나는 (적어도 Mac OS X에서는) <string.h>헤더와 헤더가 모두 있다는 것을 알았습니다 <strings.h>. man 3 string다른 기능을 포함하고 있음을 보여줍니다. 이것에 대한 이유가 있습니까?


2
그만한 가치가있는 OS X strings.h에는 비표준 기능이 포함되어 있습니다 bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp. 그게 전부입니다.
Potatoswatter 2011

3
@Potatoswatter : POSIX에서 지정한대로 정확히 수행하고 있습니다.
R .. GitHub STOP HELPING ICE

답변:


114

strings.h는 유닉스 진화의 BSD 브랜치에서 나왔습니다. 그 내용은 POSIX에 의해 표준화되었지만 대부분은 레거시로 표시되며 다른 기능으로 쉽게 대체 할 수 있습니다.

int    bcmp(const void *, const void *, size_t); /* LEGACY, see memcmp */
void   bcopy(const void *, void *, size_t); /* LEGACY, see memcpy, memmove */
void   bzero(void *, size_t); /* LEGACY, see memset */
int    ffs(int);
char  *index(const char *, int); /* LEGACY, see strchr */
char  *rindex(const char *, int); /* LEGACY, see strrchr */
int    strcasecmp(const char *, const char *);
int    strncasecmp(const char *, const char *, size_t);

4
일부 C 표준 라이브러리는의 더 이상 사용되지 않는 함수 strings.hstring.h. 예를 들어, Glibc를 참조하십시오 .
entropo 2011

19

일반적으로 <strings.h>유용하지만 비표준적인 추가 문자열 함수를 표준 헤더에 추가합니다 <string.h>. 최대한의 이식성을 위해 사용해야 <string.h>하지만 <strings.h>이식성이 필요한 것보다 더 많은 기능 이 필요한 경우 <strings.h>대신 사용할 수 있습니다 <string.h>.


1
이 기능에 대한 설명이 "유용하다"고 의문을 제기합니다. 대부분은 이름이 다른 표준 ANSI / ISO C 함수의 추악한 BSD 복제입니다. 바이트 문자열에 대한 대 / 소문자를 구분하지 않는 비교 함수는 (크로스 플랫폼 안정성 측면에서) 아마도 최신 UTF-8 문자열에서 유용하지 않을 수 있으며 "작동"하더라도 프로그래머가 원하는 의미를 제공하지 않을 수 있습니다. 단지 ffs유용 할 수 있습니다.
R .. GitHub STOP HELPING ICE

4
@R .: 이러한 함수를 사용하는 컴파일 할 레거시 BSD 코드가있는 경우 유용합니다. ;-)
Paul R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.