2

我正在用 C++ 创建一个自己的类字符串。

我对此有疑问:

class String {
    char* arr;
    int len;

    friend ostream& operator << (ostream& s, const String& c) {
        return s << c.arr;
    }

    Public:
        String() {
            arr = NULL;
            len = 0;
        }
        String(const char* name) {
            *arr = *name;
        }
}

主要我有这个:

String *s = new String("abcde"); 
    cout << *s << endl;

问题是编译器向我展示了这个:

总线错误:10

我正在使用带有 g++ 的终端在 Mac 上工作。

我怎么解决这个问题?

提前致谢。

4

1 回答 1

6

这个:

String(const char* name) {
    *arr = *name;
//  ^^^^
}

取消引用未初始化的指针,从而给您未定义的行为。我想你真正想做的是这样的:

#include <cstring> // For strlen() and strcpy()

String(const char* name) {
    len = strlen(name);
    arr = new char[len + 1];
    strcpy(arr, name);
}

此外,不要忘记提供用于清理的析构函数、复制构造函数和复制赋值运算符 - 如果在 C++11 中工作,还提供移动构造函数和移动赋值运算符。

于 2013-06-17T18:44:14.367 回答