2012-03-30 70 views
13

I #include <string.h> nhưng khi tôi gọi strcasestr(src, search); tôi nhận được thông báo lỗi sau implicit declaration of function ‘strcasestr’. làm cách nào để biên dịch: gcc-4.6 -Wall -lsqlite3 -lunac -Werror -O2 -o foo.out foo.c cách khắc phục sự cố này? Cảm ơn trước.Làm cách nào để sử dụng strcasestr()?

Trả lời

21

Như quy định trong corresponding manpage, vì strcasestr là một phần mở rộng không chuẩn bạn phải #define _GNU_SOURCE trước #include <string.h> trước khi bất kỳ #include (các file khác có thể đã bao gồm <string.h>, nhờ @Cubbi để chỉ ra vấn đề tiềm năng này).

+0

Tôi đã thêm quá hàm nguyên mẫu: '#include #define _GNU_SOURCE char * strcasestr (const char * haystack, const char * needle);' và hoạt động tốt ngay bây giờ. Cảm ơn rất nhiều. – Jack

+1

@Jack, bạn không cần phải (và không nên) thêm nguyên mẫu. Tuy nhiên, định nghĩa cần phải là ** trước ** bao gồm. –

+2

Hãy nhớ: đảm bảo rằng #define là dòng đầu tiên trong tệp. Nếu bạn '#include ', sau đó '#define _GNU_SOURCE', và sau đó' #include ', bạn sẽ không nhận được strcasestr vì stdio.h đã bao gồm chuỗi.h. Lựa chọn an toàn được biên dịch với -D_GNU_SOURCE. – Cubbi

6

Bạn phải thêm:

#define _GNU_SOURCE 

trước string.h bao gồm, kể từ khi chức năng là không chuẩn.

Các vấn đề liên quan