zoukankan      html  css  js  c++  java
  • 一道字符串复制的面试题目

    很多技术笔试都考字符串复制函数的编写(不能用那个库函数),  
      有人说说这个函数的考点在哪里和编写的时候要注意的问题吗?  
      最好能有编写严谨的例程。  
      函数声明:  
      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本身就是简单一致性原则的绝妙产品。

  • 相关阅读:
    Linq 实例
    VS的无用文件
    我在vs文本编辑中常用的快捷键----常更新
    EF+MVC学习中的不理解的问题
    Lambda表达式
    Linq学习(主要参考linq之路)----2LINQ方法语法
    WPF编译时提示“...不包含适合于入口点的静态‘Main’方法 ...”
    SQL
    SQL Server
    sql 判断表是否存在
  • 原文地址:https://www.cnblogs.com/buffer/p/1277648.html
Copyright © 2011-2022 走看看