簡體   English   中英

無法從“ std :: string”轉換為“ LPSTR”

[英]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的代碼,則LPTSTRstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM