简单问题,数组界限的

kofwr 2006-12-29 12:24:31
某构造函数
Employee::Employee( const char *first, const char *last )
{
firstName = new char[ strlen( first ) + 1 ];
assert( firstName != 0 ); // terminate if not allocated
strcpy( firstName, first );
}
firstName是char型指针,为什么它声明char数组的时候要来个strlen(first) + 1?
为什么不用strlen(first)呢,这个+1好像也没有什么效果
我按照cout << "&" << firstName<< "&" << endl;输出后,有+1和没有的结果是一样的
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dx30611 2006-12-29
  • 打赏
  • 举报
回复
比如
Employee::Employee( const char *first, const char *last )
{
int a=10;
firstName = new char[ strlen( first )];
int b=9;
assert( firstName != 0 ); // terminate if not allocated
strcpy( firstName, first );
cout<<a<<' '<<b<<endl;
}
如果10和9不行,可以多试几个数,你会发现它们改变了。
dx30611 2006-12-29
  • 打赏
  • 举报
回复
strcpy不做边界检查,所以不加1跟加1输出的结果都一样,但是如果不加1的话,可能会把你定义的别的数据修改掉,不信你试试,多定义一些变量并初始化,然后再变量的中间进行内存分配和赋值,肯定改变了其他的变量。
OOPhaisky 2006-12-29
  • 打赏
  • 举报
回复
firstName是char型指针,为什么它声明char数组的时候要来个strlen(first) + 1?
为什么不用strlen(first)呢,这个+1好像也没有什么效果
------------------------------------------------------------------------------------
加1是因为字符串结尾有一个字符串结束符'\0'。

那为啥不加1跟加1输出的结果都一样?
-------------------------------------------------------------------------------------
那是因为碰巧+1位置上的值也为0,但是这只是“偶然”情况,所以为了安全起见,还是按照规矩办事的好。
kofwr 2006-12-29
  • 打赏
  • 举报
回复
那为啥不加1跟加1输出的结果都一样?
DragonBill 2006-12-29
  • 打赏
  • 举报
回复
+1的那个位置留给空字符('\0')的,这样<<遇到'\0'才知道输出结束。

64,664

社区成员

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

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