[英]Use strcpy to transform a C++ string to a Char array
出於某種原因,我試圖將C ++字符串轉換為char數組。 以下是我的所作所為:
string aS="hello world";
char aC[aS.size()];
strcpy(aC, aS.c_str());
cout << aC[0] << endl;
string bS="veooci m eode owtwolwwwwtwwj mooawee mdeeme eeeec eme aemmeledmll llllleolclclcmslococecewaccocmelaeaccoaaooojutmjooooocoemoooealm omjcdmcmkemmdemmmiwecmcmteeeote eoeeeem ecc e yolc e w dtoooojttttmtwtt ttjcttoowl otdooco ko mooooo aowmemm o et jmc cmlctmmcccjcccecomatocooccoeoclooomoecwooo mcdoo dcdco dddooedoemod eddeedoedje emadleweemeeedeeeec or o m wejeetoj o ojjjlwdjjjj mjmceaeoaai laaadoaa aetmotaemmj mmmmmmlmm cmol c mwoaoe omav";
char bC[bS.size()];
strcpy(bC, bS.c_str());
cout << aC[0] << endl;
首次調用aC [0]時,它按預期給出'h'。 但是,當第二次調用aC [0]時,它給出''。 有人能解釋一下這里發生了什么嗎?
char aC[aS.size()];
需要是:
char aC[aS.size() + 1];
為了允許C字符串所需的終止'\\0'
。
如果您不想使用std::string::c_str()
成員函數,則應該動態分配char數組,因為您無法在C ++中聲明可變長度數組,例如:
char* bC = new char[aS.size() + 1]; // don't forget to delete[]
strcpy(bC, bS.c_str());
如果你正在調用一個會改變字符串緩沖區的函數(在C ++ 11之前),我可以看到更改為數組的一些實用工具。 否則,如果不打算更改緩沖區,請使用其他解決方案,例如c_str()
。
但是,如果由於緩沖區可能被更改而確實需要char數組,請使用std::vector<char>
。 這將繞過使用非標准語法( aC[aS.size()]
)的問題,並消除了動態分配內存的需要。 std::vector<char>
實際上是一個可更改的字符串緩沖區,僅包裝。
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
string aS="hello world";
std::vector<char> aC(aS.begin(), aS.end()); // copy
aC.push_back(0); // null-terminate
cout << &aC[0] << endl;
}
輸出:
hello world
現在,在需要指定字符數組指針的位置,只需傳遞向量中第一個元素的地址(假設向量不為空)。
實例: http : //ideone.com/tF32Zt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.