[英]cannot convert from 'std::string' to 'LPSTR'
由於無法將LPCSTR從一個函數傳遞給另一個函數(數據已更改),因此我嘗試將其作為字符串傳遞。
但是稍后,我需要再次將其轉換回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的代碼,則LPTSTR
和std::string
類型不兼容。 您應該使用std::wstring
代替。
重要說明:如果將結果指針s
從上方傳遞給試圖修改其指向的數據的函數,則將導致不確定的行為。 正確處理它的唯一方法是將字符串復制到非常量緩沖區中(例如,通過strdup
)
如果您需要LPSTR
,則意味着該字符串將被/可以被修改。 std::string::c_str()
返回一個const
指針,您不能只const_cast
它,並希望世界上一切都好,因為事實並非如此。 字符串可能會以各種令人討厭的方式更改,並且您最初的std::string
會被所有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()
嗎? 那應該工作。
可以通過使用TCHAR來替換LPSTR(即在tchar.h中找到)。 因此,如果您有std :: string,則可以使用方法std :: string :: c_str()。
如果您正在調用的函數不寫入字符串,而只是讀取它,那么您可以簡單地使用string :: c_str方法。 如果要寫東西,那么您可能應該通過調用string :: reserve()確保字符串具有足夠的空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.