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

VS2019中scanf函數(shù)莫名報錯怎么辦 Visual Studio2019實用小操作介紹

  發(fā)布時間:2024-01-22 09:19:17   作者:佚名   我要評論
相信很多小伙伴在第一次使用scanf函數(shù)時大概率會遇到系統(tǒng)報錯的問題,提示:scanf這個函數(shù)或者變量可能不安全 ,考慮使用scanf_s替換,下面我們就來看看詳細的解決辦法

在.c文件中添加宏定義取消錯誤

在使用vs編譯器時,我們使用scanf函數(shù),可能有些小伙伴會疑惑,為什么我的代碼沒有錯誤,vs依然報錯。

這里有兩種方式解決。

第一種方法解釋

scanf來源于c語言標準庫,vs2019中scanf函數(shù)被認為是不安全的,因為它不能保證輸入數(shù)據(jù)的長度不會超過指定的緩沖區(qū)的大小,可能導致緩沖區(qū)溢出漏洞,為了解決這個問題vs2019提供一組安全版本的輸入函數(shù)如scanf_s,它是基于c11和c++標準引入的一組安全輸入函數(shù),不屬于c語言標準庫的一部分但是是屬于可選的拓展庫,stdio.h是c語言標準庫中的一個頭文件,scanf_s也被支持在此頭文件中使用。scanf是C語言提供的,scanf_s是VS提供的,這里我用的是vs編譯器,為了保證兼容性,這里可以使用scanf_s,但是如果你們使用的是別的編譯器,例如gcc,vc就可以使用scanf.

但是假如一個程序里面大量使用scanf函數(shù)或者以后每次編程使用,我們都要一個一個將scanf改成scanf_s是不是過于麻煩了呢?這里我們還沒有總結(jié)到宏定義,在這里就直接告訴大家一個小技巧。

第二種方法—使用宏定義的方法

例如:

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", a);
	printf("%d\n", a);
	return 0;

把這串字符復制粘貼在代碼的開頭,加上:''#define _CRT_SECURE_NO_WARNINGS 6''。(一定要放在第一行?。。。?define是宏定義,這里的6是編譯器隨機給的一個數(shù),這里把他改成任意數(shù)字都是可以的。可能你們的編譯器上還會報一個scanf返回值被忽略的警告,這個是沒關(guān)系,代碼依然可以運行。

例如:

#define _CRT_SECURE_NO_WARNINGS 6
#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", a);
	printf("%d\n", a);
	return 0;
}

那么代碼就能在vs中正常運行。

可是后面如果我每次使用scanf、strcpy、strcat...這些函數(shù)時,vs都會提示不安全,那我每次都要在.c文件中都加入''#define _CRT_SECURE_NO_WARNINGS 6'',有沒有更方便的辦法?我一創(chuàng)建項目就能自動添加這行代碼呢?答案當然是能的?。ú蝗晃乙膊粫谶@里說,這不是打自己的臉嗎。)

步驟:

1.這里我們先找到newc++file.cpp這個文件,在這個文件中加入''#define _CRT_SECURE_NO_WARNINGS 1'',以后新建的文件中都會自動加上''#define _CRT_SECURE_NO_WARNINGS 1''。(可以使用之前我分享的工具Everything進行查找文件newc++file.cpp)(Everything等工具講解鏈接:http://t.csdn.cn/EJ62i)

例如:

2.接下來我們點擊對應(yīng)的newc++ file.cpp文件,右擊鼠標,點擊選項》打開路徑(o),然后跳到newc++ file.cpp這個文件的位置。例如:

千萬不要把這個路徑關(guān)閉,不然后面可能找不到了。

3.然后我們來到桌面,點擊newc++ file.cpp,右擊鼠標,選項》打開方式(H),選擇一種打開方式,可以是記事本...,這里我就用vs2019打開,打開之后是下面這樣空空如也的:

這個時候,我們把''#define _CRT_SECURE_NO_WARNINGS 1'',Ctrl+S保存就可以了。例如:

這個時候關(guān)閉vs,復制一下我們電腦桌面的newc++ file.cpp文件,回到我們的路徑下面

粘貼替換掉原來的newc++ file.cpp文件,例如:

粘貼完成后,如果不放心,你可以點擊newc++ file.cpp文件,右擊鼠標,選擇》打開方式(o)進行查看,這個時侯就會出現(xiàn)''#define _CRT_SECURE_NO_WARNINGS 1'',例如:

這樣以后每次新建項目都會自動加入''#define _CRT_SECURE_NO_WARNINGS 1''.

代碼的隱藏

這里我們可能聽說過程序員將自己創(chuàng)作的優(yōu)質(zhì)代碼賣出,例如有一名程序員寫了一個比較有價值的代碼,他想把這個代碼賣個公司,自己維護,然后每年收費,那這是怎么實現(xiàn)的呢?這里我給大家介紹C/C++的一種辦法,通過vs2019實現(xiàn)代碼的隱藏。

以下列這段代碼為例:實現(xiàn)兩數(shù)的加法運算

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int a, int b)
{
	return a + b;
}
int main()
{
	int a=0;
	int b=0;
	scanf("%d %d", &a, &b);
	int ret=Add(a,b);
	printf("%d\n", ret);
	return 0;
}

現(xiàn)在假設(shè)程序員設(shè)計的就是這個Add程序,這個程序很有價值,因此他想要把這段代碼隱藏起來,賣給另外一個公司。那么怎么在vs中實現(xiàn)代碼隱藏呢?

1. 首先把代碼的定義(也就是這段代碼的實現(xiàn))放入另一個.c文件(不和main函數(shù)放在一個.c文件中)。例如:

2.在使用庫函數(shù)時,我們知道要使用庫函數(shù),必須要引用包含這段庫函數(shù)的頭文件。這里我們自定義一個函數(shù)也是如此,需要引用對應(yīng)源文件的頭文件。因此我們需要創(chuàng)建一個頭文件,將我們自定義的函數(shù)包括進去。例如:

完成后點擊添加。這樣就是下列圖示:

這樣Add.h與Add.c就成為一個模塊(加法模塊)。接下來,我們還要在頭文件中添加我們對應(yīng)創(chuàng)立的源文件(.c)的聲明,例如:

這里出現(xiàn)的#pragma once就是創(chuàng)建頭文件的意思,這里把它刪掉也可以,沒有影響。做到這里,我們把源文件(.c)和頭文件(.c)都準備好了,那么接下來就是在主函數(shù)中引用了。例如:

這里我們一般規(guī)定庫函數(shù)中的頭文件用<>表示,自定義的函數(shù)用""表示。

做到這一步就是如下圖所示:

這個時候我們依然還是沒有實現(xiàn)代碼的隱藏呀?別急!精彩繼續(xù)!

3.點擊項目》屬性》配置屬性》常規(guī)》配置屬性》默認是應(yīng)用程序(.exe),這里要把應(yīng)用程序改成靜態(tài)庫(.lib)》點擊應(yīng)用》點擊確定

4.完成以后,我們調(diào)試運行,就會出現(xiàn)下列警告,例如:

表明在D:\code\university\test01\Debug路徑下生成一個.lib文件,我們順著路徑找到我們的.lib文件,例如:

這個時候我們用試著打開這個文件,用記事本打開就會發(fā)現(xiàn)是一堆亂碼,這樣大家都看不懂就實現(xiàn)了代碼的隱藏,例如:

這里我們用別的編譯器打開,會顯示無權(quán)限無法打開。這樣我們就實現(xiàn)了代碼的隱藏,到這里還沒有結(jié)束。

5.我們把代碼隱藏了,又如何賣給公司呢?這時候我們將寫好的封裝函數(shù)復制,例如:

這里我假設(shè)把它們賣給test_23_4_16這個公司,我們就將生成的.lib放在test_23_4_16這個文件中,以及這個函數(shù)的頭文件.h也放在里面(頭文件中就顯示了函數(shù)的返回類型以及參數(shù)類型,別人猜不出函數(shù)代碼,因此頭文件可以一起賣出,但是這里千萬不能把.c文件放進去,不然剛才做的一切都白費了,別人就能打開你的.c文件看到其中內(nèi)容),例如:

然后打開test_23_4_16這個項目,把這兩個文件添加到對應(yīng)的文件下:

接下來調(diào)試運行,會顯示執(zhí)行不了

6.到了這里不要驚慌,這里我們需要導入靜態(tài)庫。

#pragma comment(lib,"Add.lib")

#pragma是預處理

comment是靜態(tài)庫

導入lib文件類型,名字是"Add.lib"的lib文件。

例如:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"Add.h"
#pragma comment(lib,"Add.lib")
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int ret=test(a, b);
	printf("%d", ret);
	return 0;
}

這樣我們就徹底完成對一個代碼的隱藏與賣出了。

以上就是vs中scanf報錯的解決辦法,希望大家喜歡,請繼續(xù)關(guān)注腳本之家。

相關(guān)推薦:

vs2022怎么修改字符集? VisualStudio2022修改默認字符集的教程

相關(guān)文章

最新評論