Perbedaan antara <string.h> dan <strings.h>

91

Saya perhatikan bahwa ada (setidaknya di Mac OS X) baik <string.h>header maupun <strings.h>header. man 3 stringmengungkapkan bahwa mereka mengandung fungsi yang berbeda. Apakah ada alasan untuk ini?

icktoofay
sumber
2
Untuk apa nilainya, OS X strings.hberisi fungsi yang tidak standar bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp… dan hanya itu.
Potatoswatter
3
@Potatoswatter: Ini melakukan persis seperti yang ditentukan oleh POSIX.
R .. GitHub STOP HELPING ICE

Jawaban:

114

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);
Pemrogram
sumber
4
Beberapa pustaka standar C telah menggabungkan fungsi yang tidak digunakan lagi strings.hmenjadi string.h. Lihat, misalnya, Glibc .
entropo
19

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>.

Paul R
sumber
1
Saya akan mempertanyakan deskripsi fungsi ini sebagai "berguna". Kebanyakan dari mereka adalah duplikat BSD jelek dari fungsi ANSI / ISO C standar dengan nama yang berbeda. Fungsi perbandingan case-insensitive untuk string byte (dalam arti keandalan lintas platform) mungkin tidak berguna pada string UTF-8 modern, dan bahkan jika mereka "bekerja", mereka mungkin tidak menyediakan semantik yang diinginkan pemrogram. Hanya ffsmungkin berguna.
R .. GitHub STOP HELPING ICE
4
@R .: berguna jika Anda memiliki kode BSD lama untuk dikompilasi yang menggunakan fungsi-fungsi ini. ;-)
Paul R