找出下列代码的错误并加以解释:class Test{ private: int num; char * testtr; public: Test(); void writetest(int ipnum = 22, const char * ipstr = "aaaabbbb"); } Test::Test(){ num = 0; testtr[0] = 'a'; testtr[1] = 'b'; } void Test::writetest(int ipnum = 22, const char * ipstr="aaaabbbb"){ num = ipnum; strcpy(testtr, ipstr); }
时间: 2024-03-23 14:36:04 浏览: 99
这段代码存在以下几个错误:
1. 在 `Test` 类的构造函数中,`testtr` 指针变量没有被初始化,导致在写入数据时会发生不可预测的行为。
2. 在 `writetest` 函数中,函数定义中的默认参数值不能再次出现,应该在函数声明中定义默认参数值。
3. 在 `writetest` 函数中,`testtr` 指针变量没有被正确初始化,导致在写入数据时会发生不可预测的行为。
下面是修改后的代码:
```c++
class Test{
private:
int num;
char * testtr;
public:
Test();
void writetest(int ipnum = 22, const char * ipstr = "aaaabbbb");
};
Test::Test(){
num = 0;
testtr = new char[10];
testtr[0] = 'a';
testtr[1] = 'b';
}
void Test::writetest(int ipnum, const char * ipstr){
num = ipnum;
strcpy(testtr, ipstr);
}
int main(){
Test t;
t.writetest(10, "hello");
return 0;
}
```
修改后的代码中,我们在 `Test` 类的构造函数中给 `testtr` 分配了内存空间,并在 `writetest` 函数中正确地使用了 `testtr` 指针变量。同时,在 `writetest` 函数中删除了函数定义中的默认参数值,只在函数声明中定义了默认参数值。
阅读全文