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

时间:2017-01-28 21:40:09

标签: c++ arrays string char string-literals

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

string word;

cout << "Enter a word ";

cin >> word;

char a[] = word;

我知道clang ++不接受这个,因为它说,“数组初始化程序必须是初始化列表或字符串文字”。

有没有使用指针可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用c_str

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

这样的东西要复制到数组:

strcpy(a, word.c_str());

答案 1 :(得分:2)

你可以创建一个具有固定大小的字符数组,就像我们在结构中使用的那样: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];