※ 引述《descent (「雄辯是銀,沉默是金」)》之銘言:
: ※ 引述《KaryuuIssen (一閃)》之銘言:
: 這個 tmp_x 就不存在了。
: 所以你的指標 x 指向一個已經不存在的 tmp_x,
: 自然是任何事情都有可能發生了。
: : const char* y = string("222").c_str();
: : cout << x << "\n"; // 222(第一行不註解的話會是111)
: : cout << y << "\n"; // 222
: : }
: : 上面程式碼x和y的輸出都是222
這種錯誤還有另外一種很常見的形式,常見於下面這樣:
class Foo {
const char* literal;
void setString(const char* a);
};
void foo::setString(const char* a) {
literal = a;
}
void foo::print() {
//作者既然那麼傳統的用const char*,會用傳統的printf也很合邏輯
std::printf("%s", a);
}