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?


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);

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.