這是我的頭文件的一部分。Overloading >>使用字符串類
#ifndef MY_STRING_H
#define MY_STRING_H
#include <iostream>
using namespace std;
class MyString
{
public:
MyString();
MyString(const char[]);
MyString(const MyString&);
~MyString();
private:
char * pChar;
size_t NumChars;
size_t NumSlots;
friend istream &operator >>(istream &, MyString &);
};
inline istream& operator >>(istream &in, MyString & Str)
{
in >> Str.pChar;
in >> Str.NumChars;
in >> Str.NumSlots;
return in;
}
在我的main.cpp我嘗試
cout << "Enter a string: ";
cin >> Str6;
我遇到的這些問題,我似乎無法想出一個辦法,爲正在進入新的字符串分配足夠的空間而且它似乎也只是把角色帶到第一個空間。所以輸出是這樣的:
Enter a String: does it work?
Your String is: does
然後我得到一個寫入內存後,堆緩衝區錯誤彈出結束。 我在想我可以使用我的拷貝構造函數中的一些代碼臨時構建一個具有足夠空間的Str obj,但我不知道如何獲得足夠大的字符數。我在正確的軌道上嗎?
cin返回空格分隔的數據。您可能需要getline() –
您不應該讀入'pChar' - 它是一個字符指針,可能指向一個現有緩衝區,對於傳入的文本來說太小(或者如果初始化或清除它,則根本沒有緩衝區到'nullptr')。你還需要闡明你的設計:你的實現在>> Str.pChar >> Str.NumChars >> Str.NumSlots;'暗示用戶希望在輸入字符串時輸入三樣東西,但是你輸入一個字符串:它的工作原理?'示例顯示,這不是你想要它如何工作。無論是先輸入'NumChars',這樣你就可以相應地分配,或者讀取char-by-char增長緩衝區。 –