class Person { public: void showInfo(); public: char _name[5]; //姓名 char _sex[5]; //性别 int _age; //年龄 }; void Test() { Person man; //定义 man._name = "jack"; man._age = 10; man._sex = "男"; man.showInfo(); }错误的原因,如何修改
时间: 2024-03-25 21:37:32 浏览: 59
php 使用 __call实现重载功能示例
这段代码的错误原因是 `_name` 和 `_sex` 是字符数组,长度为5,但是在给它们赋值时使用了字符串常量,长度超过了5,导致内存越界,可能会导致程序崩溃或其他不可预测的行为。
为了修复这个问题,可以将 `_name` 和 `_sex` 的长度增加到可以存储所需字符串的最大长度。另外,在给它们赋值时,可以使用 `strcpy` 函数或者 `std::string` 类型的赋值操作符。
修复后的代码如下:
```
#include <iostream>
#include <cstring>
class Person {
public:
void showInfo() {
std::cout << "姓名:" << _name << std::endl;
std::cout << "性别:" << _sex << std::endl;
std::cout << "年龄:" << _age << std::endl;
}
public:
char _name[20]; //姓名
char _sex[5]; //性别
int _age; //年龄
};
void Test() {
Person man; //定义
strcpy(man._name, "jack");
man._age = 10;
strcpy(man._sex, "男");
man.showInfo();
}
```
或者使用 `std::string` 类型:
```
#include <iostream>
#include <string>
class Person {
public:
void showInfo() {
std::cout << "姓名:" << _name << std::endl;
std::cout << "性别:" << _sex << std::endl;
std::cout << "年龄:" << _age << std::endl;
}
public:
std::string _name; //姓名
std::string _sex; //性别
int _age; //年龄
};
void Test() {
Person man; //定义
man._name = "jack";
man._age = 10;
man._sex = "男";
man.showInfo();
}
```
阅读全文