Đoạn mã này OK hay không dẫn đến hành vi không xác định?Gọi c_str của chuỗi rỗng
std::string s;
assert(strlen(s.c_str())==0);
Nếu nó không phải là hành vi không xác định, xác nhận trên sẽ vượt qua?
Đoạn mã này OK hay không dẫn đến hành vi không xác định?Gọi c_str của chuỗi rỗng
std::string s;
assert(strlen(s.c_str())==0);
Nếu nó không phải là hành vi không xác định, xác nhận trên sẽ vượt qua?
Có nó sẽ làm việc (nếu bạn nối thêm ()
để c_str
để làm cho nó thực sự gọi hàm) và khẳng định sẽ vượt qua.
Đó là lỗi biên dịch (nếu bạn đã bật xác nhận), kể từ const char *(std::string::*)()
, không thể chuyển đổi thành const char *
hoàn toàn.
(Tongue chỉ nửa chừng trong má.)
Điều đó được xác định một cách hoàn hảo và xác nhận đã qua. Hàm c_str() sẽ luôn trả về một chuỗi C đã kết thúc bằng không hợp lệ.
Một thường sẽ sử dụng trống() để kiểm tra chuỗi rỗng.