- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:解决方案是将 LPTSTR 替换为 wstring。当 Windows API 需要 LPTSTR 时,将使用 .c_str() 转换 wstring
我的问题是,一个变量 (LPTSTR) 超出了范围,我无法修复它。我会解释...
在我的代码中,我试图将图像的名称保存在一个类中。我正在使用的Class保存了函数限制、标志和其他需要保存的变量,例如原始文件目录。
我使用的是 Windows,因此当我想加载图像时,图像名称需要位于 LPTSTR 中(已启用 Unicode)。我已经对 Ascii 到 Unicode 的转换感到头疼了。
对于我的大部分代码,在我尝试保存此图像名称之前,我对此类没有任何问题。第一次创建和保存图像名称时,名称仅在 main 的一个函数深处创建,并且有效!我第二次用相同的函数创建一个新的图像名称,但函数调用距离 main 有 3 级深。当第 2 级返回到第 1 级时,我的图像名称超出范围(字符串被覆盖)。
我正在尝试变通,但 3 天后,没有任何效果。
这是我的类 setter 代码。这是残酷的,因为它试图成为一种解决方法。
// From the Limit.h
void Set_BMPName(LPTSTR S);
LPTSTR BMPName;
// From the Limit.cpp
void Limit::Set_BMPName(LPTSTR S)
{// This function should set BMPName to S.
static LPTSTR* StaticString = new LPTSTR(S);
// I used static to stop the variable from going out of scope.
if (*StaticString != S)
{ // Because StaticString is static, it wont get updated if the name is changed.
delete StaticString;
// So delete it.
static LPTSTR* StaticString = new LPTSTR(S);
// And remake it..
}
BMPName = *StaticString;
// Then set BMPName to this Static variable.
return;
};
我第一次调用 Set_BMPName() 名称时它起作用了。第二次调用 setter 时,进入了 If 循环,但是当生成新的 StaticString 时,没有分配值。我可能错误地使用了“new”运算符吗?
如果您需要查看更多代码,请告诉我。谢谢。
最佳答案
看,这就是 Microsoft 给出的指针类型名称看起来不像指针的问题。
Long pointer to TCHAR string (source)
您的 LPTSTR
实际上并不包含一个字符串;就像 char*
(或 wchar_t*
)一样,它只是指向一个。您可以随心所欲地使用指针的生命周期,但这不会对实际数据做任何事情。当然,动态分配指针(虽然是一种创造性的尝试)无济于事。
为什么不使用适当的 C++ 技术,如 std::string
(或 std::wstring
)呢?然后你将在三分钟内完成,而不是三天。 :-)
如果您真的被 LPTSTR
困住了,那么请使用专用于将一个数据复制到另一个的 Windows API 函数:StringCchCopy
.
关于c++ - LPTSTR Losing Scope,变通无效 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512489/
这个问题已经有答案了: How do I concatenate const/literal strings in C? (17 个回答) 已关闭 7 年前。 我想向 LPTSTR 添加一个字符串。
我正在为应用程序创建 DLL。应用程序调用 DLL 并接收长度为 8 到 50 的字符串。 我遇到的问题是仅显示应用程序收到的任何消息的第一个字母。 下面是 GetMethodVersion 函数。
我需要创建一个变量以在 CreateProcess 中使用: CreateProcess(z7Cmdline, z7Arg, NULL, NULL, FALSE, NULL, NULL, NULL,
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我试图理解为什么在执行这段代码期间会发生段错误(SIGSEGV)。该错误在测试 while 指令中指定的条件时发生,但不是在第一次迭代时发生,而是在第二次迭代时发生。 LPTSTR arrayStr[
我正在使用此代码获取 Windows 版本: #define BUFSIZE 256 bool config::GetOS(LPTSTR OSv) { OSVERSIONINFOEX osve;
我正在尝试复制 LPTSTR 并将该字符串作为成员变量存储在对象中。但是我复制 LPTSTR 的尝试似乎失败了,当我去访问/打印复制的 LPTSTR 的值时,我遇到了程序崩溃。 是否可以复制 LPTS
我需要一个提供 LPTSTR 和枚举值的函数,根据该值构造一个字符串并将其放入 LPTSTR。 我编写了以下函数,它使用由枚举值索引的名称数组: bool GetWinClassName(const
我一直在使用一个从过滤器驱动程序接收消息的应用程序。驱动程序运行良好,但我的内存管理有问题,可能是 LPTSTRs user & domain。 在调试时,我收到有关堆损坏的消息,它们通常指向两个 f
有人能说我用对了吗? LPTSTR nameProc = ""; ... GetProcessImageFileName( hProcess, nameProc, 50 ); printf("name
我正在 Visual Studio 2013 上编写 C++ dll。我的 dll 应该从 ini 文件中读取参数。因此,我为此创建了一个函数 (ReadConnectionSettings())。我
这个问题在这里已经有了答案: Convert lptstr to char* (8 个答案) Convert LPTSTR to string or char * to be written to
有没有等价于 LPTSTR 的字符串?我知道字符串和 wstring。有 tstring 吗? 最佳答案 你可以定义一个: typedef std::basic_string mystring; ..
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Convert lptstr to char* 我需要将 LPTSTR p 转换为 CHAR ch[]。我是
嗨,谁能帮我将 LPTSTR 转换为 QString 最佳答案 您将在 the docs 中看到Qstring 提供了静态函数来转换 ascii 和 Unicode 字符串: QString from
我需要将 LPTSTR 转换为 LPCWSTR。我需要这个,因为我从 GetDlgItemText 获取 LPTSTR,我将把它提供给 ExtTextOut,它接受 LPCWSTR. 编辑:在从 Ge
我有以下代码来枚举给定 .exe 中的所有资源文件 BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lp
我需要将注册表中的值存储在 map 中。我有这样的代码: map mymap; for (i = 0, retCode = ERROR_SUCCESS; i(i, val));
函数参数为LPCTSTR&。 我必须将 LPTSTR 变量作为 LPCTSTR& 传递。 如何将LPTSTR转换为LPCTSTR&。 提前致谢。 最佳答案 根据我以前的 C++ 经验,您正试图通过引用
因此函数 GetUserName() 的输出将用户名作为 LPTSTR。我需要将其转换为 LPCSTR,因为我希望用户名成为 ftp 目录的名称。 TCHAR id [UNLEN+1]; DWORD
我是一名优秀的程序员,十分优秀!