读书人

字符串拷贝函数 为啥不检查两个字符串

发布时间: 2012-05-20 16:03:12 作者: rapoo

字符串拷贝函数 为啥不检查两个字符串的大小
函数: void strcpy(char * Dest,char * Src)
{
while(*Src)
{
*Dest++=*Src++;
}
}
众所周之,当对两个字符串进行拷贝的时候,如果源子符串长度大于目标字符串,就会发生溢出的问题. 可是我们为什么不再拷贝之前,先对字符串的长度进行比较呢?
下面我写的代码可以解决这个问题吗?
函数: void strcpy(char * Dest,char * Src)
{
if(strlen(Src)>strlen(Dest))
return;
while(*Src)
{
*Dest++=*Src++;
}
}

[解决办法]
因为这是一个被大量调用的底层库
为了效率的考虑,把效验约定放在上一层来做

[解决办法]
if(strlen(Src)>strlen(Dest))
这句话本身就有问题,正常Dest在使用前应该被初始化,长度是0,没法子判断。。。
[解决办法]
Dest是否分配足够内存,不是通过strlen来判断的,具体判断大概比较复杂
[解决办法]
第一:因为这是一个被大量调用的底层库
为了效率的考虑,把效验约定放在上一层来做
第二:默认一般拷贝字符串的人肯定心里对字符串的长度有数,不会使用容量不够的数组存放的呢
[解决办法]
首先,你的测试代码是有错的。strlen(Dest)不能代表Dest的可用空间。

其次,你以为C为什么会高效率的?要是对空间都做尺寸检查,它就要慢很多了。
[解决办法]
这帖子发的跟学术论文似的,有意思。
我想还是效率吧,你还没判断两个参数是不是NULL呢,如果都判断了,势必很慢。
C的优势即在于效率,没了效率,C语言也就没有优势了。

读书人网 >C语言

热点推荐