我有一個正在處理的字符串類的附加函數部分,並且在使用時發生了一些非常奇怪的事情。當我打印出附加字符串裏面功能,然後也main
,它的工作原理。但是當我註釋掉功能中的打印部分並且將打印留在main
時,輸出是一些隨機字符。下面是代碼:C++字符串追加函數奇怪行爲
String.cpp:
void String::append(const String buf)
{
char c[99];
for (auto i = 0; i < this->length(); ++i) {
c[i] = this->cstr()[i];
}
for (auto i = this->length(); i < (this->length() + buf.length() + 1); ++i) {
c[i] = buf.cstr()[i - this->length()];
}
*this = c;
printf("%s\n", *this); // if I comment this line out then the append function doesn't work properly
}
主要:
int main()
{
String a = "Hello";
String b = "Hi";
a.append(b);
printf("%s\n", a);
}
當使用兩個打印功能時,輸出是這樣的:
當僅使用主打印功能時:
什麼可能導致這種情況?謝謝。
編輯:
賦值運算符:
String &String::operator=(char* buf) {
_buffer = buf;
return *this;
}
構造:
String::String(char* buf) : _buffer(buf), _length(0) {
setLength();
}
複製一個陣列顯示您的賦值運算符(S)和字符串構造函數。 – paddy
我已添加它們。 –
您不能在您的班級中存儲不再存在的指針。這是未定義的行爲。你需要保持一個數組(最大大小),或者使用動態內存(使用標準容器使這更容易)。另外,你忘了從'operator ='調用'setLength'。 – paddy