C語言 strcpy_s 函數 - C語言零基礎入門教程

目錄html

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門python

一.strcpy_s 函數簡介

C 語言string.hstrcpy 函數,可用完成 char 字符串拷貝;而今天即將介紹的 strcpy_s 函數其實和 strcpy 函數相似, strcpy 函數使用時,咱們也注意到了兩個問題:編程

1.strcpy 函數報錯:error C4996

詳細介紹請參考:C 語言 error C4996: This function or variable may be unsafewindows

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.
解決辦法:include 以後添加代碼
#pragma warning( disable : 4996)

2.strcpy 函數沒有方法來保證有效的緩衝區尺寸,使用不安全

strcpy_s 是系統的安全函數,微軟在 2005 後建議用一系統所謂安全的函數,這中間就有 strcpy_s 取代了 strcpy
strcpy 函數沒有方法來保證有效的緩衝區尺寸,因此它僅僅能假定緩衝足夠大來容納要拷貝的字符串。在程序執行時,這將致使不可預料的行爲,容易致使程序崩潰,例如以下代碼:安全

/******************************************************************************************/
//@Author:猿說編程
//@Blog(我的博客地址): www.codersrc.com
//@File:C語言教程 - C語言 strcpy_s 函數
//@Time:2021/06/03 08:00
//@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!
/******************************************************************************************/


char src[1024] = { "C/C++教程-strcpy函數\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("strcpy以前 dst:%s\n", dst);
strcpy(dst, src);  // 很明顯 dst 的空間大小並不能徹底存放 src,程序會崩潰
printf("strcpy以後 dst:%s\n", dst);

二.strcpy_s 函數語法

strcpy_s 函數能夠經過設置目標緩衝區大小來夠避免上面的不可預料的行爲,語法以下:ide

/*
*描述:此類函數是用於對字符串進行復制(拷貝)。
*
*參數:
*   [out] strDestination:拷貝完成以後的字符串
*   [in] numberOfElements: strDestination目標緩衝區長度
*   [in] strSource:須要拷貝的字符串
*
*返回值:返回一個整數,0表示複製成功,返回非0值表明複製不成功,不一樣的值表示不一樣的錯誤,具體內容能夠查閱MSDN手冊
*/
errno_t strcpy_s(char *strDestination , size_t numberOfElements , const char *strSource);

三.strcpy_s 函數實戰

1.strcpy_s 函數簡單使用

/******************************************************************************************/
//@Author:猿說編程
//@Blog(我的博客地址): www.codersrc.com
//@File:C語言教程 - C語言 strcpy_s 函數
//@Time:2021/06/03 08:00
//@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!
/******************************************************************************************/

#include "stdafx.h"
#include<stdlib.h>
#include<stdio.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)
void main()
{
    char src[1024] = { "C/C++教程-strcpy_s函數 - www.codersrc.com" };
    char dst[1024] = { 0 };
    int len_src = sizeof(src)/sizeof(char);
    int len_dst = sizeof(dst) / sizeof(char);
    printf("len_src:%d len_dst:%d\n", len_src,len_dst);
    printf("strcpy_s以前 dst:%s\n", dst);
    strcpy_s(dst, sizeof(dst)/sizeof(dst[0]), src);
    printf("strcpy_s以後 dst:%s\n", dst);
    printf("\n");
    system("pause");
}
/*
輸出:
len_src:1024 len_dst:1024
strcpy_s以前 dst:
strcpy_s以後 dst:C/C++教程-strcpy_s函數 - www.codersrc.com
請按任意鍵繼續. . .
*/

注意:strcpy_s 函數第二個參數,是設置目標緩衝區大小,並不是原始緩衝區大小函數

strcpy_s(dst, sizeof(dst)/sizeof(dst[0]), src); //正確寫法
strcpy_s(dst, sizeof(src)/sizeof(src[0]), src);  //錯誤寫法

2.strcpy_s 函數拷貝內容以’\0’結尾

char 字符串中有做介紹,字符串默認都是'\0'結尾,strcpy_s 函數在拷貝過程當中,若是遇到'\0'結束符,那麼直接結束拷貝,看下面例子:學習

/******************************************************************************************/
//@Author:猿說編程
//@Blog(我的博客地址): www.codersrc.com
//@File:C語言教程 - C語言 strcpy_s 函數
//@Time:2021/06/03 08:00
//@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!
/******************************************************************************************/


char src[1024] = { "C/C++教程-strcpy_s函數\0 - www.codersrc.com" };
char dst[1024] = { 0 };
printf("strcpy_s以前 dst:%s\n", dst);
strcpy_s(dst, sizeof(dst)/sizeof(dst[0]), src);
printf("strcpy_s以後 dst:%s\n", dst);
printf("\n");
system("pause");
/*
輸出:
strcpy_s以前 dst:
strcpy_s以後 dst:C/C++教程-strcpy_s函數
請按任意鍵繼續. . .
*/

重上面的輸出結果能夠看出:strcpy_s 函數在拷貝的時候,若是遇到 '\0' ,那麼拷貝直接結束,因此上面使用 strcpy_s 拷貝的時候,dst 字符串明顯少了一段字符" - www.codersrc.com";字體

四.猜你喜歡

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

未經容許不得轉載:猿說編程 » C 語言 strcpy_s 函數插件

本文由博客 - 猿說編程 猿說編程 發佈!

相關文章
相關標籤/搜索