[英]storing a c++ string into a char* vector
我正在嘗試將此字符串存儲到指針向量中。 這只是代碼的起點。 最終,向量將存儲用戶鍵入的單詞,如果向量沒有它,則將其添加到向量中,或者顯示單詞已經在向量中。
我試圖使用strcpy()但它告訴我使用strcpy_s()。 所以我現在做了,現在它每次都崩潰而沒有錯誤。 有人可以給我一些洞察這里發生的事情。
vector<char*> wordBank;
string str;
cin >> str;
wordBank[0] = new char[str.length() + 1];
strcpy_s(wordBank[0], str.length() + 1 , str.c_str() );
cout << wordBank[0];
delete[] wordBank[0];
我不會考慮vector<char*> wordBank;
這個c ++代碼,而是碰巧使用某些C ++特性的C代碼。
C ++中的標准庫可以讓您的生活更輕松。 您應該使用std::vector<std::string>
。
vector<string> wordBank;
wordBank.push_back(str);
它避免了所有的指針內容,所以你不需要做內存管理(這是擺脫指針的一個很好的理由)。
對於strcpy_s
,它是strcpy
的更安全版本,因為您必須顯式指定目標緩沖區的大小,這可以避免在復制期間緩沖區溢出。
但是, strcpy_s
是非標准的並且是MS特定的,除非您只想在MSVS上編譯代碼,否則切勿使用strcpy_s
。 請改用std::copy
。
vector
的默認大小為0
因此這條線
vector<char*> wordBank;
只定義一個0大小的字符指針vector
正如人們在評論中提到的那樣,您可以選擇以下兩種方案之一: -
vector<char*> wordBank(1);
要么
wordBank.push_back(...);
您不需要向量中的char*
元素。 您可以使用string
,並使用push_back()
將字符串附加到向量,這將分配所需的空間:
vector<string> wordBank;
string str;
cin >> str;
wordBank.push_back(str);
cout << wordBank[0];
每次要從向量中刪除字符串時,這將使您免於必須使用delete
的負擔。 基本上,你永遠不必對任何東西使用delete
,為了實現這一點,你應該避免使用new
分配內存。 在這種情況下,這意味着避免使用new char[/*...*/]
,這反過來意味着你應該使用string
來存儲字符串。
vector<char*> wordBank;
構造一個空的向量。 因此,使用operator[]
wordBank[0]
具有未定義的行為,因為您正在訪問越界。
返回對指定位置pos處的元素的引用。 不執行邊界檢查。
您可以使用push_back
添加新元素,如下所示:
wordBank.push_back(new char[str.length + 1]);
當然最明智的事情就是使用一個strings
vector
vector<string> wordBank;
wordBank.push_back(str);
您正在嘗試手動管理字符串的內存,而std::string
類則是為您設計的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.