這樣做的現代方法是什麼?像<cstring>
這樣的標題已被棄用,某些編碼風格禁止使用「類C」功能。我有三種做同樣的事情的方法。哪一個會是現代C++最習慣的?將字符串複製到char的現代C++方法*
1.使用迭代器和包括空終止
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::copy(test.begin(), test.end(),
output);
output[test.size() + 1] = '\0';
std::cout << output;
delete output;
}
2.使用c_str()
包括空終止
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::copy(test.c_str(), test.c_str() + std::strlen(test.c_str()),
output);
std::cout << output;
delete output;
}
3.使用std::strcpy
{
std::string test{"hello, world!"};
char* output = new char[test.size() + 1];
std::strcpy(output, test.c_str());
std::cout << output;
delete output;
}
我不想看起來像一個面試官說,「哦,你使用strcpy,你必須是一個C程序員」noobot。
如果我是你,我會擔心異常安全性,用'try'包裝整個塊,並抓住'std :: bad_alloc'。另外,「像這樣的標題已被棄用」 - 因爲什麼時候?! –
什麼*確切*是目標數據結構?它是malloc分配的以0結尾的字符串嗎?或者它是「可訪問的0結束字符串」?或者實際上真的是混蛋新分配的0終止的字符串? – Deduplicator
@DanielKamilKozar自C++ 98起。瘋狂,我知道。 – user6364501