C語(yǔ)言 memcpy 函數(shù) - C語(yǔ)言零基礎(chǔ)入門(mén)教程

目錄

零基礎(chǔ) C/C++ 學(xué)習(xí)路線(xiàn)推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語(yǔ)言基礎(chǔ)入門(mén)

一.memcpy 函數(shù)簡(jiǎn)介

C 語(yǔ)言string.hstrcpy 函數(shù)strcpy_s 函數(shù),可用完成 char 字符串拷貝,對(duì)于字符串拷貝,還有 memcpy 函數(shù)也能完成筑煮,語(yǔ)法如下:

/*
*描述:此類(lèi)函數(shù)是用于對(duì)字符串進(jìn)行復(fù)制(拷貝)劫映,屬于內(nèi)存拷貝坪郭!
*
*參數(shù):
*   [out] dst:拷貝完成之后的字符串
*   [in] src :需要拷貝的字符串
*   [in] n   :需要拷貝的字節(jié)數(shù)
*
*返回值:指向 dst 這個(gè)字符串的指針
*注意:如果需要拷貝的字節(jié)數(shù)n 大于 dst 的內(nèi)存大小奢方,程序會(huì)崩潰
*/
void *memcpy(void *dst, void *src, unsigned int n);

注意:

1.strcpy 函數(shù)和 strcpy_s 函數(shù)在拷貝過(guò)程中颁督,如果遇到'\0'結(jié)束符单雾,那么直接結(jié)束拷貝赚哗;memcpy 函數(shù)拷貝過(guò)程中就算遇到'\0'結(jié)束符也不會(huì)結(jié)束;

strcpy 函數(shù)和 strcpy_s 函數(shù) 屬于字符串拷貝;
memcpy 函數(shù)屬于內(nèi)存拷貝;

2.如果使用 memcpy 函數(shù)提示 error:4996硅堆,請(qǐng)參考:error C4996: ‘fopen’: This function or variable may be unsafe

error C4996: 'memcpy': This function or variable may be unsafe. Consider using memcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

3.必須保證 dst 空間足夠大屿储,能夠容納 src ,如果 dst 內(nèi)存空間大小比 src 更小渐逃,會(huì)導(dǎo)致溢出錯(cuò)誤够掠,引起程序崩潰!可以通過(guò) sizeof 函數(shù)查看內(nèi)存內(nèi)存大小茄菊,舉個(gè)例子:50ml 的水杯能倒進(jìn) 500ml 的水杯沒(méi)問(wèn)題疯潭,500ml 的水杯倒進(jìn) 50ml 的水杯,會(huì)溢出很多水面殖;

二.memcpy 函數(shù)實(shí)戰(zhàn)

1.memcpy 函數(shù)簡(jiǎn)單使用

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言教程 - C語(yǔ)言 memcpy 函數(shù)
//@Time:2021/06/03 08:00
//@Motto:不積跬步無(wú)以至千里竖哩,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累脊僚!
/******************************************************************************************/

#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "windows.h"
//error C4996: 'memcpy': This function or variable may be unsafe. Consider using memcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
#pragma warning( disable : 4996)
void main()
{
    char src[1024] = { "C/C++教程-memcpy函數(shù) - www.codersrc.com" };
    char dst[1024] = { 0 };
    printf("memcpy之前 dst:%s\n", dst); //空字符串
    memcpy(dst, src , sizeof(src)/sizeof(char));
    printf("memcpy之后 dst:%s\n", dst);//
    printf("\n");
    system("pause");
}
/*
輸出:
memcpy之前 dst:
memcpy之后 dst:C/C++教程-memcpy函數(shù) - www.codersrc.com
請(qǐng)按任意鍵繼續(xù). . .
*/

2.strcpy 函數(shù)屬于字符串拷貝

char 字符串中有作介紹期丰,字符串默認(rèn)都是'\0'結(jié)尾,strcpy 函數(shù)或者 strcpy_s 函數(shù)在拷貝過(guò)程中吃挑,如果遇到'\0'結(jié)束符,那么直接結(jié)束拷貝街立,看下面例子:

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言教程 - C語(yǔ)言 memcpy函數(shù)
//@Time:2021/06/03 08:00
//@Motto:不積跬步無(wú)以至千里舶衬,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累赎离!
/******************************************************************************************/

char src[1024] = { "C/C++教程-strcpy函數(shù)\0 - www.codersrc.com" };
char dst[1024] = { 0 };
printf("strcpy之前 dst:%s\n", dst);
strcpy(dst, src );
printf("strcpy之后 dst:%s\n", dst);
printf("\n");
system("pause");

/*
輸出:
strcpy之前 dst:
strcpy之后 dst:C/C++教程-strcpy函數(shù)
請(qǐng)按任意鍵繼續(xù). . .
*/

重上面的輸出結(jié)果可以看出:strcpy 函數(shù)在拷貝的時(shí)候逛犹,如果遇到'\0',那么拷貝直接結(jié)束,所以上面使用 strcpy 拷貝的時(shí)候虽画,dst 字符串明顯少了一段字符" - www.codersrc.com";

3.memcpy 函數(shù)屬于內(nèi)存拷貝

而 memcpy 函數(shù)不同舞蔽,memcpy 屬于內(nèi)存拷貝,即便在拷貝過(guò)程中遇到'\0'結(jié)束符码撰,也不會(huì)結(jié)束拷貝渗柿,舉個(gè)例子:

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言教程 - C語(yǔ)言 memcpy函數(shù)
//@Time:2021/06/03 08:00
//@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海脖岛,程序人生的精彩需要堅(jiān)持不懈地積累朵栖!
/******************************************************************************************/

char src[1024] = { "C/C++教程-memcpy函數(shù)\0 - www.codersrc.com" };
char dst[1024] = { 0 };
printf("memcpy之前 dst:%s\n", dst);
memcpy(dst, src, sizeof(src)/sizeof(char));
printf("memcpy之后 dst:%s\n", dst);
printf("\n");
system("pause");

/*
輸出:

memcpy之前 dst:
memcpy之后 dst:C/C++教程-memcpy函數(shù)\0 - www.codersrc.com
請(qǐng)按任意鍵繼續(xù). . .
*/

很明顯,memcpy 函數(shù)內(nèi)存拷貝的時(shí)候柴梆,'\0'僅僅是當(dāng)作了內(nèi)存中的數(shù)據(jù)陨溅,并不代表拷貝結(jié)尾;

4.memcpy 函數(shù)注意崩潰問(wèn)題

如果使用 memcpy 的時(shí)候需要拷貝的字符大小比 dst 內(nèi)存大時(shí)绍在,程序運(yùn)行會(huì)崩潰门扇,memcpy 函數(shù)在字符串拷貝的時(shí)候并不會(huì)檢查兩個(gè)字符串空間大小,所有很容易產(chǎn)生崩潰偿渡,這也是 error C4996 的原因之一臼寄,舉個(gè)例子:

/******************************************************************************************/
//@Author:猿說(shuō)編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言教程 - C語(yǔ)言 memcpy函數(shù)
//@Time:2021/06/03 08:00
//@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海卸察,程序人生的精彩需要堅(jiān)持不懈地積累脯厨!
/******************************************************************************************/

#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "windows.h"
//error C4996: 'memcpy': This function or variable may be unsafe. Consider using memcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
#pragma warning( disable : 4996)
void main()
{
    char src[1024] = { "C/C++教程-memcpy函數(shù)\0 - www.codersrc.com" };
    char dst[10] = { 0 };
    int len_src = sizeof(src)/sizeof(char); // 1024
    int len_dst = sizeof(dst) / sizeof(char); //10
    printf("len_src:%d len_dst:%d\n", len_src,len_dst);
    printf("memcpy之前 dst:%s\n", dst);
    memcpy(dst, src, len_src);  // 很明顯 dst 的空間大小只有10個(gè)字節(jié)并不能完全存放 src 1024個(gè)字節(jié),程序崩潰
    printf("memcpy之后 dst:%s\n", dst);
}
/*
輸出:
len_src:1024 len_dst:10
*/

三.猜你喜歡

  1. 安裝 Visual Studio
  2. 安裝 Visual Studio 插件 Visual Assist
  3. Visual Studio 2008 卸載
  4. Visual Studio 2003/2015 卸載
  5. 設(shè)置 Visual Studio 字體/背景/行號(hào)
  6. C 語(yǔ)言格式控制符/占位符
  7. C 語(yǔ)言邏輯運(yùn)算符
  8. C 語(yǔ)言三目運(yùn)算符
  9. C 語(yǔ)言逗號(hào)表達(dá)式
  10. C 語(yǔ)言自加自減運(yùn)算符(++i / i++)
  11. C 語(yǔ)言 for 循環(huán)
  12. C 語(yǔ)言 break 和 continue
  13. C 語(yǔ)言 while 循環(huán)
  14. C 語(yǔ)言 do while 和 while 循環(huán)
  15. C 語(yǔ)言 switch 語(yǔ)句
  16. C 語(yǔ)言 goto 語(yǔ)句
  17. C 語(yǔ)言 char 字符串
  18. C 語(yǔ)言 strlen 函數(shù)
  19. C 語(yǔ)言 sizeof 函數(shù)
  20. C 語(yǔ)言 sizeof 和 strlen 函數(shù)區(qū)別
  21. C 語(yǔ)言 strcpy 函數(shù)
  22. C 語(yǔ)言 strcpy_s 函數(shù)
  23. C 語(yǔ)言 memcpy 函數(shù)

未經(jīng)允許不得轉(zhuǎn)載:猿說(shuō)編程 ? C 語(yǔ)言 memcpy 函數(shù)

本文由博客 - 猿說(shuō)編程 猿說(shuō)編程 發(fā)布坑质!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末合武,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涡扼,更是在濱河造成了極大的恐慌稼跳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃沪,死亡現(xiàn)場(chǎng)離奇詭異汤善,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)票彪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)红淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人降铸,你說(shuō)我怎么就攤上這事在旱。” “怎么了推掸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵桶蝎,是天一觀(guān)的道長(zhǎng)驻仅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)登渣,這世上最難降的妖魔是什么噪服? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮胜茧,結(jié)果婚禮上粘优,老公的妹妹穿的比我還像新娘。我一直安慰自己竹揍,他們只是感情好敬飒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著芬位,像睡著了一般无拗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昧碉,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天英染,我揣著相機(jī)與錄音,去河邊找鬼被饿。 笑死四康,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狭握。 我是一名探鬼主播闪金,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼论颅!你這毒婦竟也來(lái)了哎垦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恃疯,失蹤者是張志新(化名)和其女友劉穎漏设,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體今妄,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑口,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盾鳞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬性。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腾仅,靈堂內(nèi)的尸體忽然破棺而出仔夺,到底是詐尸還是另有隱情,我是刑警寧澤攒砖,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布缸兔,位于F島的核電站,受9級(jí)特大地震影響吹艇,放射性物質(zhì)發(fā)生泄漏惰蜜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一受神、第九天 我趴在偏房一處隱蔽的房頂上張望抛猖。 院中可真熱鬧,春花似錦鼻听、人聲如沸财著。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撑教。三九已至,卻和暖如春醉拓,著一層夾襖步出監(jiān)牢的瞬間伟姐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工亿卤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愤兵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓排吴,卻偏偏與公主長(zhǎng)得像秆乳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钻哩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容