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

Initializing an array of characters with a string variable

我知道 char a[] = "Hello World"; 有效,但我想知道是否有一种方法可以让字符数组由在 运行 时输入的字符串初始化。 例如:

string word;

cout << "Enter a word ";

cin >> word;

char a[] = word;

我知道 clang++ 不接受这个,因为它说 "array initializer must be an initializer list or string literal"。

有没有不使用指针的解决方法?

使用c_str.

http://en.cppreference.com/w/cpp/string/basic_string/c_str

然后像这样复制到数组:

strcpy(a, word.c_str());

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

char a[100];
string word;

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

strcpy(a, word.c_str());

上面的代码工作正常,但问题是如果用户输入大于 100 个字符的文本,那么你就会 UB。

事实上,堆栈数组在编译时必须具有恒定大小,而字符串可以在运行时更改大小,这意味着您不能这样做,但是有一个替代方法,您可以根据运行时的大小创建动态数组字符串然后使用 strcpy():

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;
  • 我最喜欢的另一种选择是使用 std::vector<char>:

    vector<char> a;
    char c;
    
    while(SomeConditionIsTrue){
        cin >> c;
        a.push_back(c);
    }
    
    for(int i(0); i < a.size(); i++)
        cout << a[i];