中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

strcpy和strncpy用法和區別

發布時間:2020-07-22 20:37:05 來源:網絡 閱讀:2477 作者:li19910110 欄目:編程語言

void *memcpy(void *dest, const void *src, int n);

功能:

      從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。

頭文件:

      #include <string.h>

返回值:

     指向dest的指針。

 

char *strcpy(char *dest, char *src);

功能:

      把src所指由'\0'結束的字符串復制到dest所指的數組中。

頭文件:

      #include "string.h"

返回值:

      指向dest的指針。

 

char * strncpy(char *dest, char *src, size_t n);

功能:

      將字符串src中最多n個字符復制到字符數組dest中

返回值:

      指向dest的指針。

頭文件:

      #include "string.h"

 

memcpy說明:

  1.src和dest所指內存區域不能重疊,函數返回指向dest的指針。

  2.與strcpy相比,memcpy并不是遇到'\0'就結束,而是一定會拷貝完n個字節。

  3.如果目標數組destin本身已有數據,執行memcpy()后,將覆蓋原有數據(最多覆蓋n)。如果要追加數據,則每次執行memcpy后,要將目標數組地址增加到你要追加數據的地址。

  //注意,src和dest都不一定是數組,任意的可讀寫的空間均可。

 

strcpy說明:

      src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。  

      當src串長度>dest串長度時,程序仍會將整個src串復制到dest區域,可是dest數組已發生溢出。因此會導致dest棧空間溢出以致產生崩潰異常。如果不考慮src串的完整性,可以把dest數組最后一元素置為NULL,從dest串長度處插入NULL截取字串。

 

strncpy說明:

      它并不像strcpy一樣只有遇到NULL才停止復制,而是多了一個條件停止,就是說如果復制到第n個字符還未遇到NULL,也一樣停止。

      如果n > dest串長度,dest棧空間溢出產生崩潰異常。

      否則:

      1)src串長度<=dest串長度,(這里的串長度包含串尾NULL字符)

      如果n=(0, src串長度),src的前n個字符復制到dest中。但是由于沒有NULL字符,所以直接訪問dest串會發生棧溢出的異常情況。

      如果n = src串長度,與strcpy一致。

      如果n = dest串長度,[0,src串長度]處存放于desk字串,(src串長度, dest串長度]處存放NULL。

      2)src串長度>dest串長度

      如果n =dest串長度,則dest串沒有NULL字符,會導致輸出會有亂碼。如果不考慮src串復制完整性,可以將dest最后一字符置為NULL。

      綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都復制到dest數組,并且從dest尾部反向操作),復制完畢后,為保險起見,將dest串最后一字符置NULL,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度<dest串長度才是最重要的。

 

 

strncpy_s:目標空間長度不夠時,會彈出assert,使copy不能正常完成,使用時需要指定源緩沖區大小。

                   _s函數只是windows提供的特有函數,功能比較強大,但是在有跨平臺需求的軟件中,不建議使用。

strncpy:拷貝你指定的個數或者碰到'\0',不驗證源緩沖區長度,可能造成越界。

memcpy:不理'\0',只拷貝你指定的個數,故strcpy可以不指定字符串長度,實現整串copy,而memcpy必定要指定長度。

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东省| 香格里拉县| 泸水县| 岑巩县| 清远市| 登封市| 海伦市| 南丹县| 务川| 青浦区| 吴忠市| 枞阳县| 邓州市| 乡宁县| 赞皇县| 绥芬河市| 三江| 九江市| 工布江达县| 兴业县| 敖汉旗| 伊金霍洛旗| 上虞市| 东山县| 赣榆县| 桐庐县| 洪洞县| 富平县| 临颍县| 闻喜县| 云林县| 德保县| 抚顺市| 石嘴山市| 永兴县| 天台县| 林芝县| 淮阳县| 靖州| 桐城市| 石棉县|