这个字符串的范围是什么?

Bag*_*uss 2 c++ c++builder c++builder-xe

如果我有以下代码:

{
    UnicodeString sFish = L"FISH";
    char *szFish = AnsiString(sFish).c_str();

    CallFunc(szFish);
}
Run Code Online (Sandbox Code Playgroud)

那么创建的临时AnsiString的范围是什么,以及szFish指向有效数据的时间有多长?它仍然对CallFunc函数有效吗?

它的范围只是一行,还是整个块?

hmj*_*mjd 5

szFish在调用之前是无效的CallFunc(),因为AnsiString是一个临时对象,它立即被销毁并szFish指向刚刚被删除的内部缓冲区.

确保AnsiString实例对于调用有效CallFunc().例如:

CallFunc(AnsiString(sFish).c_str());
Run Code Online (Sandbox Code Playgroud)