如题:
cout<<"\n-----------------------------\n";
cout<<"\n请输入你要添加的学生信息\n";
cout<<"学号:";
cin>>student.snum;
cout<<"\n姓名:";
cin>>student.sname;
cout<<"\n年龄:";
cin>>student.sage;
cout<<"\n性别:";
cin>>student.ssex;
cout<<"\n专业:";
cin>>student.smajor; //m_pRecordset->MoveFirst();//移动到第一条记录
m_pRecordset->MoveLast();//移动到第一条记录
m_pRecordset->AddNew();//添加新记录
m_pRecordset->PutCollect("bianm",_variant_t(student.snum));
cout<<student.sname<<endl;
m_pRecordset->PutCollect("xingm",_variant_t(student.sname));
m_pRecordset->PutCollect("nianl",_variant_t(student.sage));
m_pRecordset->PutCollect("xingb",_variant_t(student.ssex));
m_pRecordset->PutCollect("ziy",_variant_t(student.smajor));
m_pRecordset->Update();
上面这个代码里,录入姓名字段值为33333333333333333时,即超过10个字符时,它会把性别的值也加到后面,写到数据库里,这是什么原因呀?
cout<<"\n-----------------------------\n";
cout<<"\n请输入你要添加的学生信息\n";
cout<<"学号:";
cin>>student.snum;
cout<<"\n姓名:";
cin>>student.sname;
cout<<"\n年龄:";
cin>>student.sage;
cout<<"\n性别:";
cin>>student.ssex;
cout<<"\n专业:";
cin>>student.smajor; //m_pRecordset->MoveFirst();//移动到第一条记录
m_pRecordset->MoveLast();//移动到第一条记录
m_pRecordset->AddNew();//添加新记录
m_pRecordset->PutCollect("bianm",_variant_t(student.snum));
cout<<student.sname<<endl;
m_pRecordset->PutCollect("xingm",_variant_t(student.sname));
m_pRecordset->PutCollect("nianl",_variant_t(student.sage));
m_pRecordset->PutCollect("xingb",_variant_t(student.ssex));
m_pRecordset->PutCollect("ziy",_variant_t(student.smajor));
m_pRecordset->Update();
上面这个代码里,录入姓名字段值为33333333333333333时,即超过10个字符时,它会把性别的值也加到后面,写到数据库里,这是什么原因呀?
class STU
{
public:
char snum[10];
char sname[10];
char ssex[2];
long sage; char smajor[20];
public:
STU(){}
~STU(){}
};int main()
{
STU student;
在你的这里
sname[10];
char ssex[2];
在内存是挨着存放的
sname超过十个后,就会把ssex覆盖掉,不信你写个12字符试试
正好十个的话,他就接着读直到遇见字符'\0',而你ssex[0]表示性别,ssex[1]应该'\0'
字符串是以'\0'唯一结束标识的
所以会这样
sname超过十个后,ssex从第十一个开始,把sname覆盖,和sname正好十个的结果是一样的。不是把ssex覆盖掉