Nur*_*yev 1 c++ function lptstr
我正在Visual Studio 2013上编写C++ DLL.我的dll应该从ini文件中读取参数.所以,我为此创建了一个函数(ReadConnectionSettings()).我的静态变量serverIP在函数工作期间正确获取值,但是一旦函数完成运行,变量(serverIP)就会丢失其值.什么似乎是问题?
static LPTSTR serverIP = _TEXT("");
void ReadConnectionSettings()
{
TCHAR url[256];
GetPrivateProfileString(_T("Connection"), _T("Url"), _T(""), url, 256, NameOfIniFile);
serverIP = url;
}
Run Code Online (Sandbox Code Playgroud)
您将指针指向serverIP
堆栈内存url
.
当函数退出时,这超出范围,因此指针指向垃圾.
你可以做的是改造serverIP
缓冲区,然后将 URL 复制到其中.然后它会坚持下去.
那是:
static TCHAR serverIP[256] = _TEXT("");
Run Code Online (Sandbox Code Playgroud)
然后:
_tcsnccpy(serverIP, url, 255);
Run Code Online (Sandbox Code Playgroud)
或者@DavidOtano建议,您可以保留现有的serverIP指针,并使用:
serverIP = _tcsdup(url);
Run Code Online (Sandbox Code Playgroud)
但是如果你这样做,你就是动态分配内存,所以需要记住调用:
free(serverIP);
Run Code Online (Sandbox Code Playgroud)
当你不再需要它时,避免内存泄漏.