c++ - 静态 LPTSTR 变量在函数执行后丢失值

标签 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;

}

最佳答案

您将指针 serverIP 指向堆栈内存 url

当函数退出时,这超出了范围,所以你的指针仍然指向垃圾。

您可以做的是将 serverIP 改为一个缓冲区,然后将 URL 复制到其中。然后它会持续存在。

即:

 static TCHAR serverIP[256] = _TEXT("");

然后:

 _tcsnccpy(serverIP, url, 255);

或者按照@DavidOtano 的建议,您可以保留现有的 serverIP 指针,并使用:

 serverIP = _tcsdup(url);

但是如果你这样做,你就是在动态分配内存,所以需要记住调用:

 free(serverIP);

当您不再需要它时,避免内存泄漏。

关于c++ - 静态 LPTSTR 变量在函数执行后丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22164120/

相关文章:

c++ - 使用 union 将相同的内存分配给类成员变量

c++ - 将 QString 转换为 LPTSTR,只显示第一个字符

c++ - 如何将 const wchar_t 类型转换为 LPTSTR (C++)

c++ - printf 和 fprintf 的不同结果

c++ - C++中make_shared和常规shared_ptr的区别

c++ - O(NlogN) 或 O(Nlog^2N) 中坐标值的 LIS

C++:初始化结构和设置函数指针

java - 可以在 Java 中向映射添加函数对象吗?

python - Sikuli 函数和运算符列表

c++ - LPTSTR Losing Scope,变通无效 (C++)