C++ 使用字符串变量初始化字符数组

C++ 使用字符串变量初始化字符数组,c++,arrays,string,char,string-literals,C++,Arrays,String,Char,String Literals,我知道chara[]=“Hello World”可以工作,但我想知道是否有一种方法可以让在运行时输入的字符串初始化字符数组。 例如: string word; cout << "Enter a word "; cin >> word; char a[] = word; 字符串字; cout>单词; 字符a[]=单词; 我知道clang++不接受这一点,因为它说,“数组初始值设定项必须是初始值设定项列表或字符串文字” 在不使用指针的情况下是否有解决方法 使用c_s

我知道
chara[]=“Hello World”
可以工作,但我想知道是否有一种方法可以让在运行时输入的字符串初始化字符数组。 例如:

string word;

cout << "Enter a word ";

cin >> word;

char a[] = word;
字符串字;
cout>单词;
字符a[]=单词;
我知道clang++不接受这一点,因为它说,“数组初始值设定项必须是初始值设定项列表或字符串文字”


在不使用指针的情况下是否有解决方法

使用
c_str

要复制到阵列,请执行以下操作:

strcpy(a, word.c_str());

您可以创建一个固定大小的字符数组,就像我们在structs中使用的那样:
charname[100]
。。。然后输入字符串,然后使用strpy进行复制

char a[100];
string word;

cout << "Enter a word ";
cin >> word;

strcpy(a, word.c_str());
  • 我最喜欢的另一种选择是使用
    std::vector

    向量a;
    字符c;
    虽然(某些条件是真的){
    cin>>c;
    a、 推回(c);
    }
    for(inti(0);i你能用
    std::vector
    吗。基本上是
    std::string
    。为什么不直接使用
    std::string
    ?它使您可以访问其内部字符数组。我知道您可以使用字符串作为更简单的解决方案,但我正在尝试了解更多有关字符数组以及它们之间的区别、字符指针和字符串。问题是您需要先分配内存,因此,您不知道用户将输入多少个字符。如果单词长度大于数组大小,该怎么办?我认为您需要定义一个MAX_size int来将该字符数组初始化为该大小。如果长度太大,请重新提示用户使用较小的字符串。是的。差不多。遵循Raindrop7的答案。这仍然要求你在手前知道长度。这个答案没有错,但吹毛求疵,它不起作用。也就是说,它不能做OP认为它能做的事。另外,使用循环填充向量的效率非常低
    std::vector
    有一个接受两个迭代器的构造函数。你应该推荐的。@StoryTeller:你是说关于向量的部分?不是“它”?使用
    新字符[]
    演示的部分。它与本地数组的作用不同。@StoryTeller:但是本地数组在编译时必须有一个恒定的大小,而字符串则必须正确。这就是为什么当你说“你能做到”时,它是错误的。因为你做不到,你用动态分配展示了完全不同的东西。
    string word;
    cout << "Enter a word ";
    cin >> word;
    
    char* a =  new char[word.length() + 1]; // 1 for Null character
    strcpy(a, word.c_str());
    
     delete[] a;
    
    vector<char> a;
    char c;
    
    while(SomeConditionIsTrue){
        cin >> c;
        a.push_back(c);
    }
    
    for(int i(0); i < a.size(); i++)
        cout << a[i];