重温strlen,sizeof,strcopy

本文详细解读了一个使用C++编写的Employee类在编译和运行时遇到的问题,通过分析代码和输出结果,找出并解决了导致运行时检查失败的原因,即变量溢出问题。文中强调了理解sizeof、strlen和strncpy等函数的重要性,并提供了避免此类错误的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <string>
using namespace std;

class Employee
{
private:
	char name[30];
	char street[30];
	char city[18];
	char zip[7];
public:
	Employee();
	Employee(char *n,char *str,char *ct,char *z);
	void change_name(char *n);
	void display();
};
Employee::Employee ()
{

}

Employee::Employee (char *n,char *str,char *ct,char *z)
{
	
	strcpy(name,n);
	strcpy(street,str);
	strcpy(city,ct);
	strcpy(zip,z);
}

void Employee::change_name (char *n)
{
	strcpy(name,n);
}

void Employee::display ()
{
	cout << name << " " << street << " "<< city << " " << zip<< endl;
}

int main()
{
	Employee em[5];
	Employee el("张三","永乐大街1号","陕西","710600");
	char a[] = "710600"; 
	cout<<sizeof(a)<<endl; //2
	el.display();
	el.change_name("李四");
	el.display();
	em[0]=el;
	em[0].display();
	system("pause");
	return 0;
}
今天在网上看到这道题,有兴趣把它弄到机子上编译了一把,最后发生错误了:Run-Time Check Failure #2 - Stack around the variable 'el' was corrupted.
查找了一下这个error,产生原因是某个变量溢出了,找了好久,才发现原来是 2 处有问题,输出语句是7 ,7 > 6 ,就溢出了,很简单。
strlen:返回数组不包括最后结束符的元素个数
sizeof:返回数组包括最后结束符的所有元素个数
strcopy: 把源数组包括最后结束符的所有元素拷贝到目标数组
谨以为戒 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值