一道字符串复制的面试题目

很多技术笔试都考字符串复制函数的编写(不能用那个库函数),  
  有人说说这个函数的考点在哪里和编写的时候要注意的问题吗?  
  最好能有编写严谨的例程。  
  函数声明:  
  char   *   strcpy(char   *   strDest,   const   char   *   strSrc)  
  目前为止,我总结出:  
  1,考察strDest和strSrc非空  
  2,考察strDest和strSrc是否重叠  
  3,注意书写结构  
  4,函数健壮性  
  另外,我觉得如果strSrc缓冲区的数据长度如果超过了strDest缓冲区  
  的长度,就会产生溢出,但怎么检查strDest缓冲区的长度?  
  有谁还有补充?  

strncpy()函数: 这个程序是真正的牛人Linus   Torvalds写的  
    
  char   *   strncpy(char   *   dest,const   char   *src,size_t   count)  
  {  
          char   *tmp   =   dest;  
   
          while   (count--   &&   (*dest++   =   *src++)   !=   '\0')  
                  /*   nothing   */;  
   
          return   tmp;  
  }  
   
  肯定会有人说:“不对呀,为什么不为目标字符串加上结束标志,变成这样:  
    while   (count--   &&   (*dest++   =   *src++)   !=   '\0')  
                  /*   nothing   */;  
      *dest   =   '\0';   ”  
   
  我说,作为strncpy函数,它只要把指定长度的字符copy给目标串就行了,而不需要自作多情,加上什么字符串结束标志,也许函数调用者根本就不想要这个结束标志,如果需要,他自己会加上的。  
   
  所以说,一个函数,只作自己该作的事,这就是简单性;而其他函数应该明白被调用函数可以作什么事,这就是一致性;Unix/Linux本身就是简单一致性原则的绝妙产品。

原文地址:https://www.cnblogs.com/buffer/p/1277648.html