【发布时间】:2023-03-12 23:24:01
【问题描述】:
你好,我做了一个像string 这样的变量存储,这是源代码
class str
{
private:
const char * _mystring;
public:
// Using this function to made new str
str(const char * _str) { _mystring = _str; }
// Get the content of this str
const char * read() { return _mystring; }
// Get the content in char *
char * read_c() { return strdup(_mystring); }
// Operator for equal action with extern const char
str & operator = (const char * _str) { _mystring = _str; return *this; }
// Operator for equal action with extern str storage
str & operator = (str _str) { _mystring = _str.read(); return *this; }
// Operator for add action
str operator + (const char * _str) {
return str(strcat(read_c(), _str));
}
// Operator for add action with new str
str operator + (str & _str) {
return str(strcat(read_c(), _str.read()));
}
};
这是我的测试程序
int main() {
str var1("Var1"); // No problem
str var2("Var2"); // No problem
str var3 = var1 + var2; // No problem
str var4 = var1 + "tempStr"; // I got runtime error !
str var5 = "tempStr" + var2; // I got error before compile
cout << var1.read() << endl;
cout << var2.read() << endl;
cout << var3.read() << endl;
cout << var4.read() << endl;
return 0;
}
问题是什么,我无法创建类似 var3 和 var4 之类的东西并且出现错误(当我想将 const char 与我的 str 合并时出现错误......我设置了 + 运算符,但是当我出现问题时想将 const char 与我的 str 合并(不是我的 str 与 const char ......在这个动作上,没有问题) 但是等一下,我在编译和打印 var7 后也出现错误(调试(关闭程序))!
【问题讨论】:
-
您具体遇到了什么错误?是编译错误还是运行时错误?还要注意 strcat 不分配所以如果你的缓冲区不够大,它是未定义的行为。
-
运行时错误...
-
是的,因为您要添加 2 个指针