
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啊? 展开
#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啊? 展开
4个回答
展开全部
在标准c++中 字符串的表示是以空字符'\0'结束的
比如你要的字符串是"abc" 实际上的形式是以字符数组表示的:"'a','b','\0'"
而vc++中计算字符串长度的函数strlen()得到的是字符串的长度 也就是3
不包括结束标记'\0' 但你在为字符串分配空间时必须考虑这个结束字符
所以分配空间的大小是 strlen(pname)+1 而不是strlen(pname)
比如你要的字符串是"abc" 实际上的形式是以字符数组表示的:"'a','b','\0'"
而vc++中计算字符串长度的函数strlen()得到的是字符串的长度 也就是3
不包括结束标记'\0' 但你在为字符串分配空间时必须考虑这个结束字符
所以分配空间的大小是 strlen(pname)+1 而不是strlen(pname)
展开全部
strcpy会复制一个NULL在后面,所以要多一个char的空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
补充一下'\0'是字符串结果符.用来标识字数组已经结束.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为系统表示字符串的方法是后面要加个'\0',而函数strlen是没在计算这个符号,所以分配时要加1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询