[英]C++ convert std::string to char
我有以下情況:
struct MyStruct
{
char name[25];
char address[12];
}
Somewhere::SomeMethod(std::shared_ptr<SomeArgumentClass> args)
{
// GetName() and GetAddress() both return std::strings
::MyStruct newValue = {args->GetName(), args->GetAddress()};
// add newValue to some structure that needs to have chars
}
錯誤:
error C2440: 'initializing' : cannot convert from 'std::string' to 'char'
error C2440: 'initializing' : cannot convert from 'std::string' to 'char'
我無法將std :: string轉換為char。
非常感謝!
首先,您的術語不正確。 您不想轉換為char
,這是一個字符。 我意識到錯誤消息聲稱您正在嘗試轉換為char
,但這是因為您的錯誤代碼使編譯器誤以為您正在嘗試初始化數組name
各個元素。 當您編寫錯誤的代碼時,請警惕錯誤消息的細節,因為編譯器無法理解您的想法,它只會超出您編寫的內容!
實際上,您要將std::string
的字符復制到char
數組中,該數組就是您的成員。
像這樣:
Somewhere::SomeMethod(std::shared_ptr<SomeArgumentClass> args)
{
const auto& name = args->GetName();
const auto& address = args->GetAddress();
::MyStruct newValue;
std::copy(std::begin(name), std::end(name), &newValue.name[0]);
std::copy(std::begin(address), std::end(address), &newValue.address[0]);
// add newValue to some structure that needs to have chars
}
但是您也需要添加邊界檢查。 為此,大概我可以考慮將每個std::copy
調用替換為:
std::copy_n(
&name[0],
std::min(name.size(), sizeof(newValue.name)),
&newValue.name[0]
);
您還需要一些空終止,具體取決於復制了多少個字符。
通常,盡管突出的一點是您需要實際復制那些字符,因為沒有單步執行方法。 這部分是由於無法分配數組的原因,也源於數組的維是該類型的一部分,這使事情變得更加復雜。
如果這看起來有點麻煩,那是因為它是-理想情況下,您應該堅持使用std::string
,因為它要優越得多,並且專門引入它是為了使其更易於處理char
數組。 您仍然可以將指向字符串數據的const char*
(或char*
!)傳遞給C API。 當然,如果::MyStruct
本身是第三方C類型,則您別無選擇,只能用困難的方式做到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.