strncpy复制字符串不能delete,strcpy却可以,为什么呢?

IT保安 2014-08-16 04:36:04
构造函数
Bank::Bank(char * name,char * account,deposit amount)
{
int x = strlen(name);
int y = strlen(account);
Customer_Name = new char[x+1];
Account = new char[y+1];
strcpy(Customer_Name,name);
strcpy(Account,account);
//strncpy(Customer_Name,name,x);
//strncpy(Account,account,y);
//Customer_Name[x+1] = '\0';
//Account[y+1] = '\0';
Amount = amount;
}

析构函数
Bank::~Bank()
{
delete [] Customer_Name;
delete [] Account;
}

如题,我用strncpy复制字符串,编译通过,运行就错误了,后来忙半天试试改成了strcpy,就可以了!
这是为什么呢,不才的很,百度了一圈没看出个所以然!

另外问一个问题,在vc上面如果出错了,要进行调试,有哪本书是专门讲关于调试的知识呢,小弟自学者,很烦恼,只会F9,F5,每次看其他朋友的帖子,一堆的调试截图,看不明白啊,想学!
...全文
144 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿麦 2014-08-16
  • 打赏
  • 举报
回复
原来的(注释掉的)有问题, //strncpy(Customer_Name,name,x); //strncpy(Account,account,y); //Customer_Name[x+1] = '\0'; //Account[y+1] = '\0'; 应该是 //Customer_Name[x] = '\0'; //Account[y] = '\0';
阿麦 2014-08-16
  • 打赏
  • 举报
回复
构造和析构都没问题,应该是其他方面的。 对x+1,y+1我表示很认同。
hjl0508 2014-08-16
  • 打赏
  • 举报
回复
引用 3 楼 henry3695 的回复:

#include "iostream"
using namespace std;
void main()
{
	char *name="戏++学编程";
	char *account="www.vs2003.net";
	int x = strlen(name);
	int y = strlen(account);
	char* Customer_Name = new char[x+1];
	char* Account = new char[y+1];
	/*strcpy(Customer_Name,name);
	strcpy(Account,account);*/
	strncpy(Customer_Name,name,x);
	strncpy(Account,account,y);
	Customer_Name[x] = '\0';
	Account[y] = '\0';
	
	printf("%s:%s\n",Customer_Name,Account);

	system("pause");
}

离成功其实就是差那么一点,多加了个1 ,越界了
++ 楼主忽略了数组下标是从0开始的
Customer_Name[x+1] = '\0';
这个相当于赋值到x+2的位置了。。。
我看你有戏 2014-08-16
  • 打赏
  • 举报
回复

#include "iostream"
using namespace std;
void main()
{
	char *name="戏++学编程";
	char *account="www.vs2003.net";
	int x = strlen(name);
	int y = strlen(account);
	char* Customer_Name = new char[x+1];
	char* Account = new char[y+1];
	/*strcpy(Customer_Name,name);
	strcpy(Account,account);*/
	strncpy(Customer_Name,name,x);
	strncpy(Account,account,y);
	Customer_Name[x] = '\0';
	Account[y] = '\0';
	
	printf("%s:%s\n",Customer_Name,Account);

	system("pause");
}

离成功其实就是差那么一点,多加了个1 ,越界了
IT保安 2014-08-16
  • 打赏
  • 举报
回复
如何理解越界了?我new的时候已经x+1 y+1了啊
帅得不敢出门 2014-08-16
  • 打赏
  • 举报
回复
//Customer_Name[x+1] = '\0'; //Account[y+1] = '\0'; 程序都越界了。出轨了。 夫妻生活能正常么

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧