Sự khác biệt giữa <string.h> và <string.h>


90

Tôi nhận thấy rằng có (ít nhất là trên Mac OS X) cả <string.h>phần đầu và <strings.h>phần đầu. man 3 stringtiết lộ rằng chúng chứa các chức năng khác nhau. Có lý do cho điều này?


2
Đối với những gì nó đáng giá, OS X strings.hchứa các chức năng không tiêu chuẩn bcmp bcopy bzero ffs index rindex strcasecmp strncasecmp… và đó là nó.
Potatoswatter

3
@Potatoswatter: Nó đang làm chính xác những gì được chỉ định bởi POSIX.
R .. GitHub NGỪNG TRỢ GIÚP TỪ NGÀY 27/11/10

Câu trả lời:


114

string.h đến từ nhánh BSD trong quá trình phát triển unix. Nội dung của nó đã được tiêu chuẩn hóa bởi POSIX, nhưng hầu hết nó được đánh dấu là kế thừa và có thể dễ dàng thay thế bằng các chức năng khác:

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
Một số thư viện tiêu chuẩn C đã hợp nhất các hàm không dùng nữa của strings.hthành string.h. Xem, ví dụ, Glibc .
entropo

19

Thông thường, <strings.h>chỉ thêm một số hàm chuỗi bổ sung hữu ích nhưng không chuẩn vào tiêu đề chuẩn <string.h>. Để có tính di động tối đa, bạn chỉ nên sử dụng <string.h>nhưng nếu bạn cần các chức năng <strings.h>nhiều hơn mức cần thiết thì bạn có thể sử dụng <strings.h>thay thế <string.h>.


1
Tôi sẽ đặt câu hỏi về mô tả của các chức năng này là "hữu ích". Hầu hết chúng là bản sao BSD xấu xí của các chức năng ANSI / ISO C tiêu chuẩn với các tên khác nhau. Các hàm so sánh phân biệt chữ hoa chữ thường cho các chuỗi byte (theo nghĩa tin cậy đa nền tảng) có thể không hữu ích trên các chuỗi UTF-8 hiện đại và ngay cả khi chúng "hoạt động", chúng có thể không cung cấp ngữ nghĩa mà lập trình viên muốn. Chỉ ffscó thể hữu ích.
R .. GitHub NGỪNG TRỢ GIÚP TỪ NGÀY 27/11/10

4
@R .: chúng hữu ích nếu bạn có mã BSD kế thừa để biên dịch sử dụng các chức năng này. ;-)
Paul R
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.