Saya perhatikan bahwa ada (setidaknya di Mac OS X) baik <string.h>
header maupun <strings.h>
header. man 3 string
mengungkapkan bahwa mereka mengandung fungsi yang berbeda. Apakah ada alasan untuk ini?
91
Saya perhatikan bahwa ada (setidaknya di Mac OS X) baik <string.h>
header maupun <strings.h>
header. man 3 string
mengungkapkan bahwa mereka mengandung fungsi yang berbeda. Apakah ada alasan untuk ini?
strings.h
berisi fungsi yang tidak standarbcmp bcopy bzero ffs index rindex strcasecmp strncasecmp
… dan hanya itu.Jawaban:
strings.h berasal dari cabang BSD dalam evolusi unix. Isinya telah distandarisasi oleh POSIX, tetapi sebagian besar ditandai sebagai warisan dan dapat dengan mudah diganti dengan fungsi lain:
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);
sumber
strings.h
menjadistring.h
. Lihat, misalnya, Glibc .Biasanya
<strings.h>
hanya menambahkan beberapa fungsi string tambahan yang berguna tetapi tidak standar ke header standar<string.h>
. Untuk portabilitas maksimum Anda hanya harus menggunakan<string.h>
tetapi jika Anda memerlukan fungsi dalam<strings.h>
lebih dari yang Anda butuhkan portabilitas maka Anda dapat menggunakan<strings.h>
bukan<string.h>
.sumber
ffs
mungkin berguna.