Ja testowałem ten kod:Czy jest bezpieczny w użyciu (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);
}
powraca "AB".
O ile mi wiadomo, od (s1 +s2)
to obiekt tymczasowy i mogą zniknąć w jakiś sposób (nie mam pojęcia o tym), a następnie const char * s
może wskazywać na pamięć nieokreślonej i może się po cenach dumpingowych.
Czy korzystanie z .c_str()
jest bezpieczne?
Włóż 'ciąg s3 (" O nie! ");' Tuż przed printf, są szanse, że twoje dane wyjściowe ulegną zmianie. (Ale to nie jest gwarantowane.) – Mat
"Możliwy duplikat" jest zasadniczo inny (użyj w obrębie tego samego pełnego wyrażenia). – MSalters