C++ 为什么我不能在C++;
这是我接收字符串的代码。 但我不知道是什么引起了问题。 有人知道吗C++ 为什么我不能在C++;,c++,string,character,C++,String,Character,这是我接收字符串的代码。 但我不知道是什么引起了问题。 有人知道吗 #include<iostream> #include<cstring> using namespace std; class person{ private: char name[100]; //char * name; public: person(void) : name(){} person(person& myPerson); ~person(v
#include<iostream>
#include<cstring>
using namespace std;
class person{
private:
char name[100];
//char * name;
public:
person(void) : name(){}
person(person& myPerson);
~person(void) {delete []name;}
void read();
void write();
};
person::person(person& myPerson ){
strcpy(name ,myPerson.name);
}
void person::read(){
cout<< "read name from console: " ;
cin >> name;
}
#包括
#包括
使用名称空间std;
班主任{
私人:
字符名[100];
//字符*名称;
公众:
person(void):name(){}
个人(个人和我的个人);
~person(void){delete[]name;}
无效读取();
无效写入();
};
person::person(person和myPerson){
strcpy(姓名,myPerson.name);
}
void person::read(){
姓名;
}
////////删除
删除[]名称来自person
的析构函数的code>。您应该只使用malloc()
或new
释放堆分配的内存,而不是堆栈分配的空间,就像您声明的固定大小数组char name[100]
。此更改将修复在程序退出时执行析构函数时收到的内存错误。您的代码有许多错误或错误样式
<>首先,建议尽可能使用C++标准库设施。因此,请使用std::string
而不是char[SIZE]
其次,使用intmain{return0;}
而不是voidmain{}
第三,删除[]名称代码>将导致内存错误。您正在释放堆栈内存,而不是堆内存
最后,我认为,类名应该从大写字母(人)开始。
<代码>空main <代码>不是合法的C++。使用int main
。如果您想让它变得简单,只需使用std::string
。现在,您的程序正处于缓冲区溢出状态。请发布错误消息。您没有告诉我们问题所在。我们应该猜猜吗?@chris oh。。。这是违法的吗?谢谢,我不知道。我会找出什么是“std::string”@IvanPavičIć我没有想到它。下面是消息。**表达式:_BLOCK_TYPE_是有效的(pHead->nBlockUse**,谢谢!我知道了。@CharlseChoi如果这回答了您的问题,请用复选符号标记它。另外,请确保您是正确的。
void person::write(){
cout << name << endl;
}
void main(void) {
person p1;
p1.read();
//p1.write();
getchar();
}