快速免責聲明,這是一個人爲的例子,旨在模擬我在作業問題中看到的問題。爲此,使用字符串是不可能的。我只能根據教師使用字符數組:(將用戶輸入複製到char矢量
我想要做的是不斷從鍵盤讀取輸入並將其存儲在vector
。問題是,無論添加到vector
的數據是否丟失當addData
函數結束時(當我嘗試查看它時,我看到\320\366\277_\377
)。我相信這是因爲我使用的是vector<char*>
,因此只要pointer
存在,vector
就只能使用該數據。 ,我的代碼無法編譯,如果我將其更改爲vector<char>
,因爲我得到的錯誤說cannot convert char* to char
。
那麼,如何保存一個字符數組(不是單個字符)到一個向量元素?或者,有沒有更好的方法可以避免這個問題呢?
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int MAX_BUFFER_SIZE = 80;
// class declaration
class Example {
public:
void getData();
void addData (char * newData);
void displayData();
private:
vector<char*> vec;
};
// main function
int main() {
bool quitProg;
int quit;
quitProg = false;
Example shoopDaWhoop; // buffers cannot overflow if you shoop da whoop
while (!quitProg) {
shoopDaWhoop.getData();
shoopDaWhoop.displayData();
cout << "Type 1 if you want to exit... ";
cin >> quit;
if (quit == 1) {
quitProg = true;
}
}
return 0;
}
void Example::getData() {
char userInput [MAX_BUFFER_SIZE];
cout << "Enter text: ";
cin.get(userInput, MAX_BUFFER_SIZE - 1, '\n');
if (cin.fail()) { // data is invalid
// clear and reset input stream
cin.clear(ios::goodbit);
cin.ignore(INT_MAX,'\n');
// alert user they entered bad data
cout << "That was bad data!" << endl;
}
else {
// data is good, pass it to addData
addData(userInput);
}
}
void Example::addData (char * newData) {
vec.push_back(newData);
cout << "You entered: " << vec.back() << endl;
}
void Example::displayData() {
for (int i=0; i<vec.size(); i++) {
cout << "Item " << i << ": " << vec[i] << endl;
}
}
不幸的是,我不允許在家庭作業中使用'string'。 – Moses
然後執行此操作(請參閱編輯)。避免做你自己的內存管理(除非指定規則要求,否則不要在原始指針中使用'new'。) – Chad