• C语言


    一、字符串的strcpy与strncpy函数

      1、编程实现strcpy函数(笔试很容易考到)

         要求: 

         原型:char *stpcpy(char *strDest,char *strSrc);   

         头文件:#include <string.h>

         功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

            说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

         返回指向dest结尾处字符(NULL)的指针。

        strcpy的代码实现:

    char * strCpy(char * strDest,const char * strSrc)   //[1]
    {
      //函数assert的头文件为#include<assert.h>   assert((strDest
    != NULL)&&(strSrc != NULL)); //[2]   char * strDestCopy=strDest; //[3]   while ((*strDest++ = *strSrc++) != ''); //[4]   return strDestCopy; //[5] }

      代码的分析:

          代码[1]:可能会忘记代码中的参数列表以及返回值 

            代码[2]:很多人会忘记对字符串指针的检查,这一部分能体现程序员的严谨性,主要体现在一下三点,

               a、不检查指针的有效性,说明答题者不注重代码的健壮性 

               b、检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识  

               c、检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处

            代码2也可以写:  if ((strDest == NULL)||(strSrc == NULL))
                               throw "Invalid argument(s)"; //throw为抛出异常

          代码[3]: 忘记保存原始的strDest值,说明答题者逻辑思维不严密。  

          代码[4]:没有什么硬性的要求,这部分功能比较容易实现,考虑到边界问题就可以了

          代码[5]:返回值是为了链式调用(一般情况下放回值是字符串类型的指针都是为了链式调用)

      

      2、编程实现strncpy函数

         要求:

          原型:    char *strncpy(char *strDest, char *strSrc, int n);     

          头文件:#include <string.h>

          功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。

          说明:

               1、如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。

            2、如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

            3、src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

          返回值:指向dest的指针。

       strncpy代码实现:  

     char * my_strncpy(char *strDest, const char *strSrc, int num)
     {
          assert((strDest != NULL) && (strSrc != NULL));
          //if (strDest == NULL || strSrc == NULL) return NULL;
    
         //保存目标字符串的首地址
         char *strDestcopy = strDest;
         while ((num--)&&(*strDest++ = *strSrc++) != '');
         //如果num大于strSrc的字符个数,将自动补''
         if (num > 0)
         {
             while(--num)
             {
                 *strDest++ = '';
             }
         }
         return strDestcopy;
    }

         代码分析:

            1、代码strncpy与代码strcpy其实相差不大,

            2、需要考虑到,如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

  • 相关阅读:
    [Java]用递归判断是否为递减数组
    android欢迎界面的编程实现[手相评分软件实例]
    工作两周年的感想
    最新基于adtbundlewindowsx86的android开发环境搭建
    新浪微博Failed to receive access token
    朋友
    房产中介
    房产中介
    与 Josh Bloch 探讨 Java 未来
    关于英语学习的一点思考
  • 原文地址:https://www.cnblogs.com/goul/p/9569477.html
Copyright © 2020-2023  润新知