日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 - strcpy和strncpy的编程实现及总结

發布時間:2024/7/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 - strcpy和strncpy的编程实现及总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、字符串的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++) != '\0'); //[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++) != '\0');//如果num大于strSrc的字符個數,將自動補'\0'if (num > 0){while(--num){*strDest++ = '\0';}}return strDestcopy;
}

     代碼分析:

        1、代碼strncpy與代碼strcpy其實相差不大,

        2、需要考慮到,如果src的長度小于n個字節,則以NULL填充dest直到復制完n個字節。

轉載于:https://www.cnblogs.com/goul/p/9569477.html

總結

以上是生活随笔為你收集整理的C语言 - strcpy和strncpy的编程实现及总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。