由于我不能将LPCSTR从一个函数传递到另一个函数(数据被更改),所以我尝试将其作为字符串传递。
但稍后我需要再次将其转换回LPSTR。在尝试转换时,我得到了上面的错误:
无法从“std::string”转换为“LPSTR”
我该如何解决这个问题?
发布于 2010-10-11 21:20:57
这只是因为您应该使用std::string::c_str()方法。
但在给定的情况下,这涉及到const_cast,因为c_str()返回的const char *不能分配给非常数LPSTR。
std::string str = "something";
LPSTR s = const_cast<char *>(str.c_str());但您必须确保str的生命周期将比LPTSTR变量的生命周期更长。
另外,如果代码编译为符合Unicode,则LPTSTR和std::string类型是不兼容的。您应该改用std::wstring。
重要说明:,如果你从上面把结果指针s传递给一个试图修改它所指向的数据的函数,这将导致未定义的行为。正确处理它的唯一方法是将字符串复制到非常量缓冲区中(例如通过strdup)。
发布于 2010-10-11 22:48:08
如果你需要一个LPSTR,这意味着字符串将会/可能会被修改。std::string::c_str()返回一个const指针,你不能简单地const_cast掉它,然后希望世界上一切都好,因为事实并非如此。字符串可能会以各种令人讨厌的方式改变,而你最初的std::string将会忽略所有这些改变。
试着这样做:
// myFunction takes an LPSTR
std::string cppString = "something";
LPSTR cString = strdup( cppString.c_str() );
try {
myFunction( cString );
cppString = cString;
} catch(...) {
free( cString );
}将字符串包装在一个智能指针中,去掉try...catch以获得加分(不要忘记自定义deleter)。
发布于 2010-10-11 21:17:53
在std::string c_str()上有一个函数。但是,我怀疑您不能在本例中使用std::string。
https://stackoverflow.com/questions/3906515
复制相似问题