簡體   English   中英

使用strcpy將C ++字符串轉換為Char數組

[英]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]時,它給出''。 有人能解釋一下這里發生了什么嗎?

出於某種原因,我試圖將C ++字符串轉換為char數組

你為什么不用.c_str() ,它為你做這個

string aS="hello world";
cout << aS.c_str();

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.

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