<String.h> ve <strings.h> arasındaki fark


91

(En azından Mac OS X'te) hem <string.h>başlık hem de başlık olduğunu fark ettim <strings.h>. man 3 stringfarklı işlevler içerdiklerini ortaya koymaktadır. Bunun için herhangi bir nedeni var mı?


2
Ne olursa olsun, OS X strings.hstandart olmayan işlevler içerir bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp… hepsi bu.
Potatoswatter

3
@Potatoswatter: Tam olarak POSIX tarafından belirtilen şeyi yapıyor.
R .. GitHub BUZA YARDIM ETMEYİ DURDUR

Yanıtlar:


114

strings.h, unix evrimindeki BSD dalından gelir. İçeriği POSIX tarafından standartlaştırılmıştır, ancak çoğu eski olarak işaretlenmiştir ve diğer işlevlerle kolayca değiştirilebilir:

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
Bazı C standart kitaplıkları, öğesinin kullanımdan kaldırılmamış işlevlerini strings.hiçine birleştirmiştir string.h. Örneğin bkz . Glibc .
entropo

19

Tipik <strings.h>olarak, standart başlığa bazı yararlı ancak standart olmayan ek dize işlevleri ekler <string.h>. Maksimum taşınabilirlik için yalnızca kullanmanız <string.h>gerekir, ancak işlevlere <strings.h>taşınabilirliğe ihtiyacınız olandan daha fazla ihtiyacınız varsa, <strings.h>bunun yerine kullanabilirsiniz <string.h>.


1
Bu işlevlerin "yararlı" olarak tanımlanmasını sorgulayacağım. Çoğu, farklı adlara sahip standart ANSI / ISO C işlevlerinin çirkin BSD kopyalarıdır. Bayt dizeleri için büyük / küçük harfe duyarsız karşılaştırma işlevleri (platformlar arası güvenilirlik anlamında) muhtemelen modern UTF-8 dizelerinde yararlı değildir ve "çalışıyor olsalar" bile, muhtemelen programcının istediği semantiği sağlamazlar. Yalnızca ffsmuhtemelen yararlıdır.
R .. GitHub BUZA YARDIM ETMEYİ DURDUR

4
@R .: Bu işlevleri kullanan eski BSD kodunuz varsa kullanışlıdırlar. ;-)
Paul R
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.