C語言 strcpy 和 strcpy_s 函數(shù)區(qū)別 - C語言零基礎(chǔ)入門教程

目錄

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

一.strcpy_s 函數(shù)/strcpy 函數(shù)簡介

1.strcpy函數(shù)語法

/*
*描述:此類函數(shù)是用于對字符串進(jìn)行復(fù)制(拷貝)。
*
*參數(shù):
*   [in] strSource:需要拷貝的字符串
*   [out] strDestination:拷貝完成之后的字符串
*
*返回值:指向 strDestination 這個(gè)字符串的指針
*/
char* strcpy(char* strDestination, const char* strSource);

2.strcpy_s函數(shù)語法

/*
*描述:此類函數(shù)是用于對字符串進(jìn)行復(fù)制(拷貝)愉昆。
*
*參數(shù):
*   [out] strDestination:拷貝完成之后的字符串
*   [in] numberOfElements: strDestination目標(biāo)緩沖區(qū)長度
*   [in] strSource:需要拷貝的字符串
*
*返回值:返回一個(gè)整數(shù)耐床,0表示復(fù)制成功煎殷,返回非0值代表復(fù)制不成功,不同的值表示不同的錯(cuò)誤箍铭,具體內(nèi)容可以查閱MSDN手冊
*/
errno_t strcpy_s(char *strDestination , size_t numberOfElements , const char *strSource);

C 語言string.hstrcpy 函數(shù)和 strcpy_s 函數(shù),都可以完成 char 字符串拷貝粮彤,注意:

1.strcpy 函數(shù)和 strcpy_s 函數(shù)在拷貝過程中,如果遇到'\0'結(jié)束符柏靶,那么直接結(jié)束拷貝;memcpy 函數(shù) / memcpy_s 函數(shù)拷貝過程中就算遇到'\0'結(jié)束符也不會結(jié)束溃论;

2.如果使用strcpy函數(shù)都會提示error:4996屎蜓,編譯器更加推薦使用strcpy_s函數(shù),否則也可以參考: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.不管是 strcpy_s 函數(shù)或者 strcpy 函數(shù) 必須保證 dst 空間足夠大,能夠容納src 钥勋,如果 dst 內(nèi)存空間大小比 src 更小炬转,會導(dǎo)致溢出錯(cuò)誤,引起程序崩潰笔诵!可以通過 sizeof 函數(shù)查看內(nèi)存內(nèi)存大小,舉個(gè)例子: 50ml 的水杯能倒進(jìn) 500ml 的水杯沒問題姑子, 500ml 的水杯倒進(jìn)50ml 的水杯乎婿,會溢出很多水;

二.strcpy/strcpy_s 函數(shù)實(shí)戰(zhàn)

char 字符串中有作介紹街佑,字符串默認(rèn)都是 '\0' 結(jié)尾谢翎, strcpy 函數(shù)或者 strcpy_s 函數(shù)在拷貝過程中,如果遇到 '\0' 結(jié)束符沐旨,那么直接結(jié)束拷貝森逮,看下面例子:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 strcpy 和 strcpy_s 函數(shù)區(qū)別
//@Time:2021/06/03 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海磁携,程序人生的精彩需要堅(jiān)持不懈地積累褒侧!
/******************************************************************************************/

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

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

三.猜你喜歡

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

未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 strcpy 和 strcpy_s 函數(shù)區(qū)別

本文由博客 - 猿說編程 猿說編程 發(fā)布统诺!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歪脏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粮呢,更是在濱河造成了極大的恐慌婿失,老刑警劉巖钞艇,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豪硅,居然都是意外死亡哩照,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門舟误,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葡秒,“玉大人,你說我怎么就攤上這事嵌溢∶心粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵赖草,是天一觀的道長学少。 經(jīng)常有香客問我,道長秧骑,這世上最難降的妖魔是什么版确? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮乎折,結(jié)果婚禮上绒疗,老公的妹妹穿的比我還像新娘。我一直安慰自己骂澄,他們只是感情好吓蘑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坟冲,像睡著了一般磨镶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上健提,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天琳猫,我揣著相機(jī)與錄音,去河邊找鬼私痹。 笑死脐嫂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的紊遵。 我是一名探鬼主播雹锣,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼癞蚕!你這毒婦竟也來了蕊爵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤桦山,失蹤者是張志新(化名)和其女友劉穎攒射,沒想到半個(gè)月后醋旦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡会放,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年饲齐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咧最。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捂人,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矢沿,到底是詐尸還是另有隱情滥搭,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布捣鲸,位于F島的核電站瑟匆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栽惶。R本人自食惡果不足惜愁溜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望外厂。 院中可真熱鬧冕象,春花似錦、人聲如沸汁蝶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穿仪。三九已至席爽,卻和暖如春意荤,著一層夾襖步出監(jiān)牢的瞬間啊片,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工玖像, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紫谷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓捐寥,卻偏偏與公主長得像笤昨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子握恳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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