拷贝字符串
来源:互联网 发布:android 网上商城源码 编辑:程序博客网 时间:2024/05/17 03:51
1.已知strcpy 函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
答案:
c代码
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) !='/0')
;
return tempptr ;
}
注意要点,
(1)传过来的源指针strSrc所指的字符串内容在该函数内是不能够修改的,因此应该声明为const类型。
(2)判断源指针或目的指针为空的情况,思维严谨,要考虑异常处理。
(3)要考虑传过来的源和目的指针指向同一个内存区的情况,如果指向同一内存区则源指针=目的指针,直接返回其中一个即可。
(4)函数原型要注意返回值为目的串的首地址,要考虑拷贝函数的返回值做其他函数的参数
C++代码,因此在函数内要保存目的指针的首地址。
(5)在拷贝字符串时,有两种方式要么先判断字符是否为空,再拷贝,这时候再循环外要给目的串加上'/0'字符;要么先拷贝再判断字符为空。
上面代码是后一种形式。
前一种形式为 :
while(*strDest!='/0')
{
*strDest++=*strSrc++;
}
*strDest='/0';
完整 c++代码:
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||(strSrc==NULL))
throw "Invalid argument(s)";
//注意不能写成 throw new String("invalid argument(s)"),因为在函数中将动态申请的内存,
//并将地址返回是一个不好的编程习惯,使用者容易在使用完函数后,不管内存的释放。
if ( strDest == strSrc)
return strDest ;
char * strDestCopy=strDest;
while ((*strDest++=*strSrc++)!='/0');
return strDestCopy;
}
从代码中看出在C++代码中多了一个异常的处理,用throw抛掷异常。
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 字符串拷贝
- 拷贝字符串
- 拷贝字符串
- 字符串拷贝
- 拷贝字符串注意拷贝'/0'
- 内存拷贝和字符串拷贝
- 字符串拷贝密码
- C++ 16 拷贝字符串
- Windows 2012 下Redmine安装和环境搭建
- iOS基石——NSTimer
- 使用datepicker和uploadify的冲突解决(IE双击才能打开附件上传对话框)
- windows定时启动tomcat的两种方法(终极版本)
- linux c++ 服务器端开发面试必看书籍
- 拷贝字符串
- MySQL GTID简单笔记
- 属性的遍历
- 【洛谷2015】【CJOJ1976】二叉苹果树
- 串口通讯介绍
- 刷新页面所有方法
- 双向链表的插入、删除、遍历
- 【DL--05】深度学习基本概念—函数式模型
- Intellij IDEA 提交代码到远程GitHub仓库