C++ 重载运算符问题创建 Char Buff 且实际大小太大

问题描述 投票:0回答:1

我正在通过 Udemy 课程学习 C++,并且遇到了重载 * 运算符的奇怪问题。

Main中,代码为S1 = S2 * 3; //S1 是一个具有指向 char 数组的单个指针的类。

问题是我试图创建一个特定大小的缓冲区并加载特定的内容。当我将缓冲区的内容发送到控制台时,缓冲区末尾似乎有 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。版本 17.7.4

c++ operator-overloading
1个回答
0
投票

buff
缺少空终止符。

char* buff = new char[what+1];

应该是

char* buff = new char[what+1];
buff[what] = 0;

或者(因为整个代码并不是最优的)

char* buff = new char[what+1]{};
© www.soinside.com 2019 - 2024. All rights reserved.