目錄
零基礎(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.h
中 strcpy
函數(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"
;
三.猜你喜歡
- 安裝 Visual Studio
- 安裝 Visual Studio 插件 Visual Assist
- Visual Studio 2008 卸載
- Visual Studio 2003/2015 卸載
- 設(shè)置 Visual Studio 字體/背景/行號
- C 語言格式控制符/占位符
- C 語言邏輯運(yùn)算符
- C 語言三目運(yùn)算符
- C 語言逗號表達(dá)式
- C 語言自加自減運(yùn)算符(++i / i++)
- C 語言 for 循環(huán)
- C 語言 break 和 continue
- C 語言 while 循環(huán)
- C 語言 do while 和 while 循環(huán)
- C 語言 switch 語句
- C 語言 goto 語句
- C 語言 char 字符串
- C 語言 strlen 函數(shù)
- C 語言 sizeof 函數(shù)
- C 語言 sizeof 和 strlen 函數(shù)區(qū)別
- C 語言 strcpy 函數(shù)
- C 語言 strcpy_s 函數(shù)
- C 語言 strcpy 和 strcpy_s 函數(shù)區(qū)別
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 strcpy 和 strcpy_s 函數(shù)區(qū)別
本文由博客 - 猿說編程 猿說編程 發(fā)布统诺!