使用字符串变量初始化字符数组
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];
我知道 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];