strcpy函数实现的一些疑问

请看下面的strcpy函数:char*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(st... 请看下面的strcpy函数:
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}

疑问1:为什么strDest和strSrc都不能为空?
疑问2:为什么还要定义一个局部变量address,直接返回strDest不就行了吗?这样做有什么用吗?
展开
 我来答
xiaofeini
2012-02-20
知道答主
回答量:3
采纳率:0%
帮助的人:6.2万
展开全部
1.空指针的地址是00,不能被赋值的。
2.在复制过程中strDest已经移动了,不再指向开始的位置,所以要用address来记录开始的位置。
百度网友28b4182
2012-02-20 · TA获得超过7224个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:2249万
展开全部
strDest 如果为空的话就说明他没有初始化,这种指针叫做野指针,野指针是不能用的,因为即使他们是有空间的但是他们的空间是不合的.如果没有指向任何的空间更是不能操作了.不然会发生内存错误.因为操作的是内存啊.你没有指向任何空间,也就操作不也任何内存,一操作就会出错,这样说懂了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangdebo321
2012-02-20 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:211万
展开全部
1。空指针无法进行后面的++操作。
2。要是像你这理解,还可以直接把DEST指向SRC就行呢。其实,这里要注意,指针和数组是有区别的。此处的指针更类似与形式参数,即只是实参的一个副本,并不会修改实参里面的数据。所以这里新建一个指针,并且对每个指针都一一赋值了。这是指针和数组的最大区别:数组做新参,并不传递副本,而是他的首地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6003d951
2012-02-20 · TA获得超过1026个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:203万
展开全部
因为如果strdest或者strsrc为空,就会使程序奔溃,因为NULL为0,0地址是不允许读写的

strdest是通过指针传进来的,有可能在其它地方被修改。所以要新定义一个局部变量
追问
0地址真的不允许读写吗 你是怎么知道的 我在网上、书上都没见过哎  听你这么一解释我恍然大悟为什么定义一个局部变量了 因为strDest可能会自增 就指不到开始位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式