最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VS中的scanf_s函數(shù)和scanf用法及說明

 更新時(shí)間:2022年11月14日 10:16:15   作者:_子沐_  
這篇文章主要介紹了VS中的scanf_s函數(shù)和scanf用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

VS中scanf_s函數(shù)和scanf

今天,在電腦上安裝了VS2017,因?yàn)橐郧耙恢笔褂玫氖荲C6.0和Dev_cpp,所以第一次使用VS有些笨拙。

今天建立的第一個(gè)C程序“hello world!”便于到的很大的難題

#include<stdio.h>
void main()
{
	
	printf("hello world!\n");
 
}

運(yùn)行無誤之后,在原先的代碼上添加了一些內(nèi)容如下:

#include<stdio.h>
void main()
{
	int a;
	printf("please input the number:\n");
	scanf("%d",&a);
	printf("nihao:-------->%d\n", a);
 
}

本來一個(gè)簡(jiǎn)單的程序,卻出現(xiàn)了異常:

于是將這段代碼放在Dev_cpp上運(yùn)行,結(jié)果運(yùn)行無誤,百思不得其解。

在網(wǎng)上搜了關(guān)于C4996錯(cuò)誤,找到了幾種解決辦法

1、根據(jù)提示,在文件頂部加入一行:#define _CRT_SECURE_NO_WARNINGS

運(yùn)行成功!

2、在文件頂部添加代碼:#pragma warning(disable:4996)

運(yùn)行成功!

3、真正原因在與vs中的SDL檢查。于是可以:右鍵單擊工程文件-->屬性-------->  c/c++  ------>SDL checks ------------> no

按照錯(cuò)誤提示,可以將 scanf 替換為  scanf_s

#include<stdio.h>
void main()
{
	int a;
	printf("please input the number:\n");
	scanf_s("%s",&a);
	printf("nihao:-------->%d\n", a);
 
}

運(yùn)行成功

但是將這段代碼放進(jìn)Dev_cpp,卻出錯(cuò)了:

于是引發(fā)了一些關(guān)于scanf_s 的一些思考:

找了一些資料

ANSI C中沒有scanf_s(),只有scanf(),scanf()在讀取時(shí)不檢查邊界,所以可能會(huì)造成內(nèi)存泄露。所以VS中提供了scanf_s()

在最新的VS2017中也提供了scanf_s()在調(diào)用時(shí),必須提供一個(gè)數(shù)字以表明最多讀取多少位字符。

如果想繼續(xù)使用scanf這個(gè)不安全的函數(shù)可以使用宏命令來阻止錯(cuò)誤的產(chǎn)生

#define _CRT_SECURE_NO_DEPRECATE

請(qǐng)把宏命令放在最前面

或者編譯選項(xiàng)中加/D_CRT_SECURE_NO_DEPRECATE

或者在所有.c/.cpp文件前面添加#pragma warning(disable:4996)

  • scanf()函數(shù)是標(biāo)準(zhǔn)C中提供的標(biāo)準(zhǔn)輸入函數(shù),用以用戶輸入數(shù)據(jù)
  • scanf_s()函數(shù)是Microsoft公司VS開發(fā)工具提供的一個(gè)功能相同的安全標(biāo)準(zhǔn)輸入函數(shù),VS系統(tǒng)提供了scanf_s()。在調(diào)用該函數(shù)時(shí),必須提供一個(gè)數(shù)字以表明最多讀取多少位字符。

scanf()在讀取數(shù)據(jù)時(shí)不檢查邊界,所以可能會(huì)造成內(nèi)存訪問越界:

//例如:分配了5字節(jié)的空間但是用戶輸入了10字節(jié),就會(huì)導(dǎo)致scanf()讀到10個(gè)字節(jié)
char buf[5]={'\0'};
scanf("%s", buf);
//如果輸入1234567890,則5以后的部分會(huì)被寫到別的變量所在的空間上去,從而可能會(huì)導(dǎo)致程序運(yùn)行異常。
以上代碼如果用scanf_s()則可避免此問題:
 
char buf[5]={'\0'};
scanf_s("%s",buf,5); //最多讀取4個(gè)字符,因?yàn)閎uf[4]要放'\0' 
//如果輸入1234567890,則buf只會(huì)接受前4個(gè)字符
注: scanf_s最后一個(gè)參數(shù)n是接收緩沖區(qū)的大小(即buf的容量),表示最多讀取n-1個(gè)字符.

PS: 很多帶“_s”后綴的函數(shù)是為了讓原版函數(shù)更安全,傳入一個(gè)和參數(shù)有關(guān)的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系統(tǒng)。 

vs中scanf報(bào)錯(cuò)的解決方法

在我們剛使用vs時(shí),在使用scanf函數(shù)時(shí)會(huì)遇到下面的這種情況,會(huì)出現(xiàn)這種情況的,發(fā)生這種情況的原因是VS認(rèn)為scanf這個(gè)函數(shù)不安全產(chǎn)生的,那么怎么解決呢,下面我簡(jiǎn)單說幾種解決方法。

1.方法一:(我推薦使用這種方法)

首先找到你安裝VS的路徑然后按下面路徑找到E:\VS2019\Common7\IDE\VC\VCProjectItems 文件夾

在里面找到newc++file.cpp這個(gè)文件 ,然后將這個(gè)文件復(fù)制到桌面上用vs打開,然后將#define _CRT_SECURE_NO_WARNINGS 1 復(fù)制到里面,保存退出,最后將桌面上的文件轉(zhuǎn)移到原路徑下,并替換掉源文件,這樣就好了,并且在以后創(chuàng)建.c文件時(shí),系統(tǒng)都會(huì)默認(rèn)添加這行代碼在你的.c文件里,以后就不會(huì)出現(xiàn)問題了

2.方法二

找到你創(chuàng)建的項(xiàng)目,右擊找到屬性,找到c/c±---->常規(guī)---->SDL檢查,將 是改為否 最后點(diǎn)擊確定就行了。

不夠這種方法在每次創(chuàng)建新項(xiàng)目是都要設(shè)置一下,比較麻煩,所以還是推薦使用方法一,設(shè)置一次后以后創(chuàng)建新文件都不用設(shè)置了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c語言實(shí)現(xiàn)的幾種常用排序算法

    c語言實(shí)現(xiàn)的幾種常用排序算法

    C,語言常用的排序方法有很多種。比如說冒泡排序,直接交換排序,直接選擇排序,直接插入排序,二分插入排序,快速排序,歸并排序等等,下面這篇文章主要給大家介紹了關(guān)于c語言實(shí)現(xiàn)幾種常用的排序算法,需要的朋友可以參考下
    2021-06-06
  • Qt實(shí)現(xiàn)簡(jiǎn)單UDP通信

    Qt實(shí)現(xiàn)簡(jiǎn)單UDP通信

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡(jiǎn)單UDP通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Qt實(shí)現(xiàn)畫筆功能

    Qt實(shí)現(xiàn)畫筆功能

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)畫筆功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C/C++判斷傳入的UTC時(shí)間是否當(dāng)天的實(shí)現(xiàn)方法

    C/C++判斷傳入的UTC時(shí)間是否當(dāng)天的實(shí)現(xiàn)方法

    在項(xiàng)目中經(jīng)常會(huì)顯示一個(gè)時(shí)間,如果這個(gè)時(shí)間在今日內(nèi)就顯示為時(shí)分秒,否則顯示為年月日,有需要的朋友可以參考一下
    2014-01-01
  • C++中的單例模式介紹

    C++中的單例模式介紹

    單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設(shè)計(jì)模式。其意圖是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn),該實(shí)例被所有程序模塊共享
    2013-03-03
  • C++之智能指針初步及棄用auto_ptr的原因分析

    C++之智能指針初步及棄用auto_ptr的原因分析

    這篇文章主要介紹了C++之智能指針初步及棄用auto_ptr的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解C語言學(xué)習(xí)記錄之指針

    詳解C語言學(xué)習(xí)記錄之指針

    關(guān)于指針,其是C語言的重點(diǎn),C語言學(xué)的好壞,其實(shí)就是指針學(xué)的好壞。其實(shí)指針并不復(fù)雜,學(xué)習(xí)指針,要正確的理解指針,本片文章能給就來學(xué)習(xí)一下
    2021-11-11
  • C++ vector刪除符合條件的元素示例分享

    C++ vector刪除符合條件的元素示例分享

    這篇文章主要介紹了C++ vector刪除符合條件的元素示例,需要的朋友可以參考下
    2014-02-02
  • 基于Qt+opencv開發(fā)的視頻播放器示例詳解

    基于Qt+opencv開發(fā)的視頻播放器示例詳解

    這篇文章主要為大家介紹了基于Qt+opencv開發(fā)的視頻播放器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C語言指針基礎(chǔ)知識(shí)實(shí)例講解

    C語言指針基礎(chǔ)知識(shí)實(shí)例講解

    這篇文章主要介紹了C語言指針基本知識(shí)實(shí)例講解,文中實(shí)例講解的很清晰,有不太懂的同學(xué)可以研究下
    2021-02-02

最新評(píng)論

西林县| 米林县| 蓝田县| 太谷县| 吉木萨尔县| 柘城县| 沙河市| 甘德县| 东乌珠穆沁旗| 韩城市| 平顶山市| 克山县| 永和县| 汉中市| 漳浦县| 治多县| 盘锦市| 定安县| 晋中市| 宣汉县| 兴义市| 嘉鱼县| 团风县| 抚州市| 林口县| 伊宁县| 巩义市| 辽阳县| 麻城市| 鄱阳县| 子长县| 环江| 肥东县| 吉安市| 巨鹿县| 元阳县| 抚远县| 天等县| 长岭县| 托里县| 类乌齐县|