c++ 代码 vs 2010 运行结果为什么 会出现这样的错误,一共有三个文件

//结果中 班级老是 显示 错误,求解答啊,这很可能就是 vs2010 的臭虫

//①StudentBase.h
#pragma once
class StudentBase
{
public:
StudentBase(void);
~StudentBase(void);
void SetBirthday(int year ,int month,int day);
void Show();
void SetNumber(char *number);
void SetAddress(char* address);
void SetSex(bool sex);
void SetName(char *name);
void SetClass(char *sclass);
private:
int Day;
int Month;
int Year;
char Name[10];
char Number[10];
bool Sex;
char Address[22];//char Address[50];
char Class[10];
};
//②StudentBase.cpp
#include "StudentBase.h"
#include<iostream>
#include<string.h>
using namespace std;
StudentBase::StudentBase(void)
{
}
StudentBase::~StudentBase(void)
{
}
void StudentBase::SetClass(char* sclass)
{
strcpy(Class,sclass);
}
void StudentBase::SetName(char *name)
{
strcpy(Name,name);
}
void StudentBase::SetSex(bool sex)
{
Sex=sex;
}
void StudentBase::SetAddress(char *address)
{
strcpy(Address,address);
}
void StudentBase::SetNumber(char *number)
{
strcpy(Number,number);
}
void StudentBase::Show()
{
cout<<"姓名:"<<Name<<endl
<<"学号:"<<Number<<endl
<<"性别:"<<(Sex?"男":"女")<<endl
<<"班级:"<<Class<<endl
<<"住址:"<<Address<<endl
<<"生日:"<<Year<<"-"<<Month<<"-"<<Day<<endl;
}
void StudentBase::SetBirthday(int year,int month,int day)
{
Year=year;
Month=month;
Day=day;
}
//③4_1.cpp
#include"StudentBase.h"
#include<iostream>
using namespace std;
void main()
{
StudentBase stu1;
stu1.SetName("Li Ming");
stu1.SetBirthday(1980,12,15);
stu1.SetClass("2009 class 1");
stu1.SetAddress("Herbin hongjun road NO.23");
stu1.SetNumber("200904010");
stu1.SetSex(true);
stu1.Show();
system("pause");
}

SetClass和SetAddress中的参数字串过长,造成了字符数组越位,加长类成员变量Class和Address的容量或缩短参数长度均可解决

stu1.SetClass("2009 class 1");
stu1.SetAddress("Herbin hongjun road NO.23");

改为
stu1.SetClass("class 1");
stu1.SetAddress("hongjun road 23");
就不会出错了,strcpy进行拷贝是不考虑数组范围的

善用调试功能,VS2010作为一个商业化的大型软件,不会有太多太明显的bug的追问

非常感谢,果然是字符数组容量 给的太小了,我改为Class[20],Address[50]后,果然运行正确了.....不过 调试时 为什么 运行完这一句"stu1.SetClass("2009 class 1");"后,Address 和Number 也跟着改变呢?求解

追答

你没有给默认构造函数写具体内容,所以在你显式地给一个成员变量赋值之前,那个变量的内容出现什么情况都是不确定的,也是没有意义的,甚至于在不同编译环境中出现的结果都不一样

温馨提示:内容为网友见解,仅供参考
无其他回答

C++VS2010提示C2146、C4091。
那是因为,如果源文件是c的话,默认所有导出函数都隐含加了extern"C"的属性你在CPP里使用那些函数,应该需要在声明里加上extern"c"属性的,否则链接器会按CPP方式去查找函数,这当然是找不到的按理说开源工程一般都会做得比较细心才对啊,你看一下它的头文件,一般在开头都会有类似下面的代码,包括wi...

用VS2010打开C++项目后,就会不断发出有规律的程序关闭的声音,卸载重 ...
vs2010创建C++项目,我感觉可能应该有两个原因,1、vs装的可能有问题,没有完整正确的安装,可能是在报错;2、还有一种可能是你的环境没有配置对,重新配置一下应该就没有什么问题~如果是vs安装的问题的话修复一下就可以解决了~~没有什么大问题,我一直用vs用的都还好,希望我的回答可以帮到你~~~...

VS2010 创建c++win32程序生成的时候总是有错误,代码没问题,运行时找不...
你用的是vc2010。这是编译器配置问题,很简单的。按下面方法设定,重编即可:右键工程,菜单——属性——配置属性——常规——字符集,改为“未设置”。确定就行。

vs2010里调试c++时总是说此项目已经过期怎么办?
vs2010里调试c++时总是说此项目已经过期,是设置错误造成的,解决方法如下:1、首先在vs2010中,看到如下图,单步执行为灰色,无法调试。2、首先检查下VS2010的版本,是否未安装VS2010 SP1补丁。VS菜单上选择帮助-》关于。3、如果版本信息里没有SP1的版本信息,就说明没有安装SP1。4、这时只需要安装VS...

VS2010 c++编译的时候总是出现找不到exe文件、这是个什么情况?求大神光 ...
exe文件运行时没有相应的清单文件而运行失败并提示如上错误。解决方案很多,列举如下:1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为\/MTd而非\/MDd,不用这些DLL文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,不推荐该方法。2. 既然跟FAT32系统有关,...

VS2010 C++ fscanf出现错误,提示debug assertion failed
说明你文件流打开失败,你首先要看看你文件打开是否成功 从你代码看,你要确保FREQUAENCY L1 Halo.DAT必须在“当前目录”下,我怀疑你文件位置不在你认为应该在的目录中

用Visual Studio 2010编写C++,调试或者运行都会出现E:\\A\\Debug\\A.exe...
1、判断在E:\\A\\Debug\\文件夹下,是否生成了A.exe 如果不存在A.exe可能是代码没有编程成功,或者编译路径出现问题。如果存在A.exe。尝试能够直接双击启动。2、重新创建一个全新的工程(带HelloWorld代码的),不进行任何修改,进行编译运行,查看VS是否正常工作。如果不能正常工作,重装一下VS吧,这样...

用VS2010编写C++程序的时候,执行后出现问题R6010 -abort() has been...
你的代码逻辑有问题,你的r2可能为负数,你用负数去构造一个string显然会有异常信息。

visual studio C++2010 系统找不到指定文件”
首先查看“项目”-“属性”-“链接器”-“常规”-“输出文件”,路劲是否是“bin\/xxx.exe”,如果是请继续看我的解答,否则请忽略下面的内容。你估计是在用VS2010加载调试以前的VC6.0下的程序是吧。那么你生成的exe是存在的,不过是在工程的bin目录下。但是在VS2010中是执行的时候是要到Debug中找...

vs2010程序运行出错 link : fatal error lnk1123: 转换到 coff 期间...
不知怎么本来编译好好的VS2010环境,忽然出现“转换到 COFF 期间失败: 文件无效或损坏”的链接错误。花了好多天,试了好多方法,最终解决了这个问题。现在罗列一下这几种解决方案:方案1:点击“项目”-->“属性” --> “清单工具”,然后选择"输入和输出’ --> ‘嵌入清单’,将后面的‘是’改...

相似回答