
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不就行了吗?这样做有什么用吗? 展开
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不就行了吗?这样做有什么用吗? 展开
展开全部
1.空指针的地址是00,不能被赋值的。
2.在复制过程中strDest已经移动了,不再指向开始的位置,所以要用address来记录开始的位置。
2.在复制过程中strDest已经移动了,不再指向开始的位置,所以要用address来记录开始的位置。
展开全部
strDest 如果为空的话就说明他没有初始化,这种指针叫做野指针,野指针是不能用的,因为即使他们是有空间的但是他们的空间是不合的.如果没有指向任何的空间更是不能操作了.不然会发生内存错误.因为操作的是内存啊.你没有指向任何空间,也就操作不也任何内存,一操作就会出错,这样说懂了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1。空指针无法进行后面的++操作。
2。要是像你这理解,还可以直接把DEST指向SRC就行呢。其实,这里要注意,指针和数组是有区别的。此处的指针更类似与形式参数,即只是实参的一个副本,并不会修改实参里面的数据。所以这里新建一个指针,并且对每个指针都一一赋值了。这是指针和数组的最大区别:数组做新参,并不传递副本,而是他的首地址。
2。要是像你这理解,还可以直接把DEST指向SRC就行呢。其实,这里要注意,指针和数组是有区别的。此处的指针更类似与形式参数,即只是实参的一个副本,并不会修改实参里面的数据。所以这里新建一个指针,并且对每个指针都一一赋值了。这是指针和数组的最大区别:数组做新参,并不传递副本,而是他的首地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为如果strdest或者strsrc为空,就会使程序奔溃,因为NULL为0,0地址是不允许读写的
strdest是通过指针传进来的,有可能在其它地方被修改。所以要新定义一个局部变量
strdest是通过指针传进来的,有可能在其它地方被修改。所以要新定义一个局部变量
追问
0地址真的不允许读写吗 你是怎么知道的 我在网上、书上都没见过哎 听你这么一解释我恍然大悟为什么定义一个局部变量了 因为strDest可能会自增 就指不到开始位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询