[英]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 ++不接受它,因為它說:“數組初始化器必須是初始化器列表或字符串文字”。
是否可以解決此問題而不使用指針?
使用c_str
。
http://en.cppreference.com/w/cpp/string/basic_string/c_str
並將類似的內容復制到數組:
strcpy(a, word.c_str());
您可以創建一個固定大小的字符數組,例如在結構中使用的char name[100]
: char name[100]
...然后輸入字符串,然后使用strpy復制。
char a[100];
string word;
cout << "Enter a word ";
cin >> word;
strcpy(a, word.c_str());
上面的代碼可以正常工作,但問題是,如果用戶插入的文本大於100個字符,則您將無法使用。
實際上,堆棧數組在編譯時必須具有恆定的大小,而字符串可以在運行時更改大小,這意味着您不能這樣做,但是還有一種替代方法,您可以根據字符串的運行時大小來創建動態數組,然后使用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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.