2011-11-12 37 views
7

Đ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?

Trả lời

5

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.

1

Đó 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á.)

7

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

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