簡體   English   中英

C ++將std :: string轉換為char

[英]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.

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