库函数strcpy/strlen的工作方式

        分类:             C/C++              2011-07-03 23:49     1032人阅读     评论(0)     收藏     举报    
 库函数strcpy/strlen的工作方式

 

库函数strcpy的工作方式,库函数strcpy/strlen的工作方式

 

库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
  2分
void strcpy( char *strDest, char *strSrc ) {   while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  4分
void strcpy( char *strDest, const char *strSrc ) //将源字符串加const,表明其为输入参数,加2分 {   while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  7分
void strcpy(char *strDest, const char *strSrc) {  //对源地址和目的地址加非0断言,加3分  assert( (strDest != NULL) && (strSrc != NULL) );  while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  10分
//为了实现链式操作,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc ) {  assert( (strDest != NULL) && (strSrc != NULL) );  char *address = strDest;  while( (*strDest++ = * strSrc++) != ‘\0’ );  return address; }   从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!

读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为:
int strlen( const char *str ) //输入参数const {  assert( strt != NULL ); //断言字符串地址非0  int len;  while( (*str++) != '\0' )  {   len++;  }  return len; }

如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
  2分
void strcpy( char *strDest, char *strSrc ) {   while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  4分
void strcpy( char *strDest, const char *strSrc ) //将源字符串加const,表明其为输入参数,加2分 {   while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  7分
void strcpy(char *strDest, const char *strSrc) {  //对源地址和目的地址加非0断言,加3分  assert( (strDest != NULL) && (strSrc != NULL) );  while( (*strDest++ = * strSrc++) != ‘\0’ ); }
  10分
//为了实现链式操作,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc ) {  assert( (strDest != NULL) && (strSrc != NULL) );  char *address = strDest;  while( (*strDest++ = * strSrc++) != ‘\0’ );  return address; }   从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!

读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为:
int strlen( const char *str ) //输入参数const {  assert( strt != NULL ); //断言字符串地址非0  int len;  while( (*str++) != '\0' )  {   len++;  }  return len; }

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之13、ABP领域层——数据过滤器(Data filters)
  2. jQuery表单编程实例
  3. Android开发之登录验证
  4. win7下安装openpyxl
  5. delphi 枚举类型
  6. 把php.exe加入系统环境变量-使用命令行可快速执行PHP命令
  7. centos 安装,配置memcached
  8. <转载>使用css让大图片不超过网页宽度
  9. html中静态进度条的实现
  10. css 禁止长按保存功能
  11. glusterfs 4.0.1 rpc 分析笔记1
  12. 插件前奏-android黑科技 hook介绍
  13. BZOJ_1823_[JSOI2010]满汉全席_2-sat+tarjan
  14. docker-compose的安装和卸载
  15. 四边形不等式优化DP
  16. JWT( JSON Web Token)
  17. laravel5.5 Syntax error or access violation: 1071 Specified key was too long
  18. Python基础之类方法和静态方法
  19. Docker的学习
  20. LG2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows

热门文章

  1. 学习推荐《从Excel到Python数据分析进阶指南》高清中文版PDF
  2. ArcGIS Engine中的重点类库介绍
  3. 《SAS编程与数据挖掘商业案例》学习笔记之十六
  4. 用MediaRecorder实现简单的录像功能
  5. tortoisegit--无法commit
  6. Vue 国家省市三级联动
  7. Day 3 EX 购物车自写
  8. 【习题 8-2 UVA-1610】Party Games
  9. WPF框架ZFS
  10. NO.1 You must restart adb and Eclipse多种情形分析与解决方式