亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

VS中scanf_s函數(shù)和scanf

今天,在電腦上安裝了VS2017,因為以前一直使用的是VC6.0和Dev_cpp,所以第一次使用VS有些笨拙。

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

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

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

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

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

于是將這段代碼放在Dev_cpp上運行,結果運行無誤,百思不得其解。

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

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

運行成功!

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

運行成功!

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

按照錯誤提示,可以將 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);
 
}

運行成功

但是將這段代碼放進Dev_cpp,卻出錯了:

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

找了一些資料

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

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

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

#define _CRT_SECURE_NO_DEPRECATE

請把宏命令放在最前面

或者編譯選項中加/D_CRT_SECURE_NO_DEPRECATE

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

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

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

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

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

vs中scanf報錯的解決方法

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

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

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

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

2.方法二

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

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

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

相關文章

  • C++多線程實現(xiàn)電子詞典

    C++多線程實現(xiàn)電子詞典

    這篇文章主要為大家詳細介紹了C++多線程實現(xiàn)電子詞典,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C++中的函數(shù)你真的理解了嗎

    C++中的函數(shù)你真的理解了嗎

    這篇文章主要為大家詳細介紹了C++中的函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++實現(xiàn)Dijkstra算法

    C++實現(xiàn)Dijkstra算法

    這篇文章主要為大家詳細介紹了C++實現(xiàn)Dijkstra算法完整代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C語言使用setjmp和longjmp實現(xiàn)一個簡單的協(xié)程

    C語言使用setjmp和longjmp實現(xiàn)一個簡單的協(xié)程

    這篇文章主要為大家介紹了C語言使用setjmp和longjmp實現(xiàn)一個簡單的協(xié)程過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • c++實現(xiàn)MD5算法實現(xiàn)代碼

    c++實現(xiàn)MD5算法實現(xiàn)代碼

    用c++實現(xiàn)了md5算法。包含 md5.h 和md5.cpp 兩個文件。主要參考百度百科 “MD5” 原理,代碼中變量命名也是參考其中的公式,程序的使用說明在md5.h 文件的末尾注釋中
    2013-11-11
  • EasyC++內(nèi)部鏈接性和無鏈接性

    EasyC++內(nèi)部鏈接性和無鏈接性

    這篇文章主要介紹了EasyC++內(nèi)部鏈接性和無鏈接性,當我們使用static關鍵字,將變量的作用于限制在整個文件時,該變量的鏈接性為內(nèi)部鏈接性,然而無鏈接性的變量其實就是在代碼塊當中使用static關鍵字創(chuàng)建的,接下來一起進入文章了解更多內(nèi)容吧
    2021-12-12
  • 一文帶你搞懂C語言動態(tài)內(nèi)存管理

    一文帶你搞懂C語言動態(tài)內(nèi)存管理

    動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存。本文將通過幾個示例帶大家深入了解一下C語言的動態(tài)內(nèi)存管理,需要的可以參考一下
    2022-11-11
  • C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)

    C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • QT6中QTextcodec頭文件找不到的解決方法

    QT6中QTextcodec頭文件找不到的解決方法

    本文主要介紹了QT6中QTextcodec頭文件找不到的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C/C++ 獲取自身IP與域名片段的示例代碼

    C/C++ 獲取自身IP與域名片段的示例代碼

    這篇文章主要介紹了C/C++ 獲取自身IP與域名片段的示例代碼,幫助大家更好的理解和學習C/C++編程,感興趣的朋友可以了解下
    2020-10-10

最新評論