C cho phép trỏ đến bộ nhớ với const hay không const con trỏ, không phân biệt nếu đối tượng đã được xác định với các vòng loại const hay không.
6,5 Expressions
- Một đối tượng có trách nhiệm đã có giá trị được lưu trữ của nó truy cập chỉ bằng một biểu thức vế trái có một trong các loại sau đây:
- phiên bản đủ điều kiện của loại tương thích với loại đối tượng hiệu quả,
Nguyên mẫu của strstr trong C là:
char *strstr(const char *s1, const char *s2);
Con trỏ trả về, nếu hợp lệ, trỏ tới chuỗi s1. Điều này có thể đạt được với dàn diễn viên:
const char safe = 's' ;
char* careful = (char*)&safe ;
Sự cố đang sửa đổi bộ nhớ đó.
6.7.3 Loại vòng loại
- Nếu một nỗ lực được thực hiện để sửa đổi một đối tượng được xác định với một kiểu const trình độ thông qua sử dụng của một giá trị trái với không const loại đủ tiêu chuẩn, hành vi không xác định.
Kể từ khi bạn đã tạo chuỗi, bạn nên biết liệu bạn có thể sửa đổi nó hay không, do đó bạn có thể chấp nhận giá trị trả về với một con trỏ đến const, để tránh bất kỳ vấn đề:
const char* find = strstr(...) ;
Bạn đang bao gồm cstring, chứ không phải string.h? Nếu không, bạn đang sử dụng phiên bản C - thần biết họ làm gì. Các phiên bản C++ 'std :: strstr' chỉ trả về' char * 'nếu tham số đầu tiên cũng không phải là 'const'' char * '. Xem [tại đây] (http://en.cppreference.com/w/cpp/string/byte/strstr). (Xin lỗi - chỉ cần chú ý đến thẻ C ... bạn đang sử dụng ngôn ngữ nào?) –
@TonyD Phiên bản C là 'char * strstr (const char *, const char *); ' –
Lưu ý rằng trong C++, có [hai overloads của strstr] (http://www.cplusplus.com/reference/cstring/strstr/) với tham số const char * và một với char bình thường *, và các giá trị trả về theo. –