Tôi đã thử nghiệm mã này:Có an toàn không khi sử dụng (str1 + str2) .c_str()?
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string s1("a"),s2("b");
const char * s = (s1+s2).c_str();
printf("%s\n",s);
}
Nó trả về "ab".
Theo như tôi biết, vì (s1 +s2)
là đối tượng tạm thời và có thể biến mất bằng cách nào đó (tôi không biết gì về điều đó), thì const char * s
có thể trỏ đến bộ nhớ không xác định và có thể bị bán phá giá.
Vì vậy, việc sử dụng số .c_str()
có an toàn không?
Chèn 'string s3 (" Oh no! ");' Ngay trước printf, rất có thể đầu ra của bạn sẽ thay đổi. (Nhưng điều đó không được bảo đảm.) – Mat
"Có thể trùng lặp" về cơ bản là khác nhau (sử dụng trong cùng một biểu thức đầy đủ) – MSalters