不能从'std :: string'转换为'LPSTR'

因为我不能将LPCSTR从一个函数传递给另一个(数据被改变)我试着把它作为一个string传递。

但是后来我需要再把它转换回LPSTR。 尝试转换时,我得到了上述错误:

不能从'std :: string'转换为'LPSTR'

我该如何解决这个问题?

这只是因为你应该使用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的,那么类型LPTSTRstd::string是不兼容的。 你应该使用std::wstring来代替。

重要提示:如果将结果指针从上面传递给一个试图修改它指向的数据的函数,将会导致未定义的行为。 正确处理它的唯一方法是将字符串复制到非常量缓冲区(例如,通过strdup

如果你需要一个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来获得奖励积分(不要忘记自定义删除者)。

在std :: string c_str()上有一个函数。 但是我怀疑你不能在你的情况下使用std :: string。

你正在运行somestringvariablename.c_str() 这应该工作。

LPSTR可以通过使用TCHAR(即在tchar.h中找到)来替代。 所以,如果你有一个std :: string,你可以使用std :: string :: c_str()方法。

如果函数,你调用不写入字符串,但只读取它,那么你可以简单地使用string :: c_str方法。 如果要写东西,那么你可能应该通过调用string :: reserve()来确保你的字符串有足够的空间。