strcpy的实现
来源:互联网 发布:大学生网络购物论文 编辑:程序博客网 时间:2024/05/15 13:26
这个号称面试必考,来总结一下
void strcpy(char *strDest, const char *strSrc)
{
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘/0’ );
}
点评:参数strSrc声明为const,表示输入参数。对Src和Dest判断是否为NULL。在字符串操作函数中,通常首先要判断字符串是否为空,也就是assert()!=NULL。
但是没有考虑越界问题,如果Dest的长度小于Src的长度就会出错。应该如何检查?strlen在这里没有用,所以strncpy明确指出要复制的字符串长度。可是仍然没有保证Dest空间足够。
char *strcpy1(char *dest, const char *src)
{
int i = 0;
while(src[i])
dest[i++] = src[i];
dest[i] = '/0';
return dest;
}
循环中访问3个变量{
int i = 0;
while(src[i])
dest[i++] = src[i];
dest[i] = '/0';
return dest;
}
char *strcpy2(char *dest, const char *src)
{
char *p = dest;
while (*src)
*dest++ = *src++;
*dest = ‘/0’;
return p;
}
优化取消变量i
优化取消变量i
char *strcpy3(char *dest, const char *src) {
const char *end = src;
char *p = dest,
while (*end)
end++;
end++;
while ((long *)src + 1 <= (long *)end)
*((long *)dest)++ = *((long *)src)++;
while (src <= end)
*dest++ = *src++;
return p;
}
第一个循环得到src长度,第二个循环每次复制4byte,最后不满4byte的部分逐个复制。
第一个循环得到src长度,第二个循环每次复制4byte,最后不满4byte的部分逐个复制。
{
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘/0’ );
}
点评:参数strSrc声明为const,表示输入参数。对Src和Dest判断是否为NULL。在字符串操作函数中,通常首先要判断字符串是否为空,也就是assert()!=NULL。
但是没有考虑越界问题,如果Dest的长度小于Src的长度就会出错。应该如何检查?strlen在这里没有用,所以strncpy明确指出要复制的字符串长度。可是仍然没有保证Dest空间足够。
- strcpy()库函数的实现
- strcpy函数的实现
- strcpy的实现
- 面试:strcpy的实现
- strcpy()的实现
- strcpy的实现
- strcpy的实现
- strcpy 的实现
- strcpy的实现代码
- strcpy的严格实现
- strcpy的实现代码
- strcpy函数的实现
- strcpy()的简洁实现
- strcpy函数的实现
- strcpy函数的实现
- strcpy的实现
- strcpy的实现
- strcpy函数的实现
- 什么样的处理器会引领嵌入式行业的未来
- 基于ARM9芯片S3C2410异常中断程序设计
- ACE 前摄式Acceptor
- cvsnt安装使用配置
- ACE 前摄式处理器
- strcpy的实现
- 又是活动!!!
- ACE 反应式处理器
- ARM处理器中断处理的编程实现
- 《QQ自由幻想》网游打造完美在线,偶有偶风采
- 基于Apache、oracle10g和tomcat5.5的ALUI安装配置方法
- 关于Java编程语言中的return
- 小工具:FlickrEdit和Picasa Webalbums Assistant,批量下载图片
- [图]Ubuntu 8.04 LTS RC之升级手册