vc++中成员函数的问题

#include"student.h"#include<iostream.h>#include<string.h>voidstudent::input(char*pid,... #include"student.h"
#include<iostream.h>
#include<string.h>
void student::input(char*pid,char*pname,int a,float s)
{
id=new char[strlen(pid)+1];
strcpy(id,pid);
name=new char[strlen(pname)+1];
strcpy(name,pname);
age=a;
score=s;
}
其中id和name是私有成员,分配空间时为什么要加1啊?
展开
 我来答
老杜说收藏
2008-10-28 · TA获得超过527个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:0
展开全部
在标准c++中 字符串的表示是以空字符'\0'结束的

比如你要的字符串是"abc" 实际上的形式是以字符数组表示的:"'a','b','\0'"

而vc++中计算字符串长度的函数strlen()得到的是字符串的长度 也就是3
不包括结束标记'\0' 但你在为字符串分配空间时必须考虑这个结束字符
所以分配空间的大小是 strlen(pname)+1 而不是strlen(pname)
很会搞笑
2008-10-28 · TA获得超过179个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:0
展开全部
strcpy会复制一个NULL在后面,所以要多一个char的空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wqsony
2008-10-28 · TA获得超过148个赞
知道答主
回答量:124
采纳率:0%
帮助的人:79万
展开全部
补充一下'\0'是字符串结果符.用来标识字数组已经结束.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fprintf
2008-10-28
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
因为系统表示字符串的方法是后面要加个'\0',而函数strlen是没在计算这个符号,所以分配时要加1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式