我正在通过 Udemy 课程学习 C++,并且遇到了重载
*
运算符的奇怪问题。
在Main中,代码是:
S1 = S2 * 3; //S1 is a Class with a single pointer to a char array.
问题是我试图创建一个特定大小的缓冲区并加载特定的内容。当我将缓冲区的内容发送到控制台时,缓冲区末尾似乎有 5 位或有时 10 位垃圾,并且构造函数无法正常工作,它只是输出垃圾。
std::cout
只是我试图确保每个步骤都能正常工作。
一切看起来都很棒,直到最后一步,当我将缓冲区的内容发送到控制台时。缓冲区总是比我预期的要大,最后还有垃圾数据。
有什么帮助吗!?
这是我的
class.cpp
文件中的代码:
//Repeat Operator
Mystring &Mystring::operator*(int x){
int size = std::strlen(str);
std::cout << size << std::endl;
std::cout << size * x << std::endl;
int what = size * x;
std::cout << what << std::endl;
char* buff = new char[what+1];
//std::cout << std::strlen(buff) << std::endl;
for (int i = 0; i < x; i++) {
for (int y = 0; y < std::strlen(str); y++) {
//std::cout << str[y] << std::endl;
buff[std::strlen(str)*i + y] = str[y];
std::cout << buff[std::strlen(str)*i+y] << std::endl;
}
}
for (int i = 0; i < std::strlen(buff); i++)
std::cout << buff[i];
std::cout << std::endl;
Mystring temp{ buff };
delete[] buff;
return temp;
}
我使用的是 Microsoft Visual Studio 2022 v17.7.4。
buff
缺少空终止符。
char* buff = new char[what+1];
应该是
char* buff = new char[what+1];
buff[what] = 0;
或者(因为整个代码并不是最优的)
char* buff = new char[what+1]{};