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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

strcpy、strncpy与memcpy的区别与使用方法

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 strcpy、strncpy与memcpy的区别与使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2018-3-19

一、函數說明
1、memcpy函數

void *memcpy(void *s1, const void *s2, size_t n);

說明:
函數memcpy從s2指向的對象中復制n個字符到s1指向的對象中。
如果復制發生在兩個重疊的對象中,則這種行為未定義。
返回值:
函數memcpy返回s1的值。

2、strcpy函數

char *strcpy(char *s2, const char *s1);

說明:
函數strcpy把s1指向的串(包括空字符)復制到s2指向的數組中。如果復制發生在兩個重疊的對象中,則這種行為未定義。
返回值:
函數strcpy返回s2的值。

3、strncpy函數

char *strncpy(char *s2, const char *s1, size_t n);

說明:
函數strncpy從s1指向的數組中最多復制n個字符(不復制空字符后面的字符)到s2指向的數組中。如果復制發生在兩個重疊的對象中,則這種行為未定義。
如果s1指向的數組是一個比n短的字符串,則在s2定義的數組后面補空字符,直到寫入了n個字符。
返回值:
函數strncpy返回s2的值。

二、注意事項
strcpy 是依據 “\0” 作為結束判斷的,如果 s2 的空間不夠,則會引起 buffer overflow。也就是說在使用strcpy時,s2指向的空間要大于等于s1指向的空間。
memcpy用來在內存中復制數據,由于字符串是以“\0”結尾的,所以對于在數據中包含“\0”的數據只能用memcpy。
Strncpy和memcpy很相似,只不過它在一個終止的空字符處停止,換言之它不能用來拷貝空字符。當n>strlen(s1)時,給s2不夠數的空間里填充“\0”;當n<=strlen(s1)時,s2是沒有結束符“\0”的。使用strncpy或memcpy時,n應該大于strlen(s1),或者說最好n >= strlen(s1)+1;這樣s2最后一個數就是“\0”。

總結

以上是生活随笔為你收集整理的strcpy、strncpy与memcpy的区别与使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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