关于C代码报不安全的时候怎么办?我是在vs2015中运行的,像c#中那样在语句前加unsafe{}不好使啊。

报错信息:

严重性 代码 说明 项目 文件 禁止显示状态

错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. struc_ary c:\users\aaron\documents\visual studio 2015\projects\struc_ary\struc_ary\源.c 24

原始代码

#include<stdio.h>


struct Student

{

int id;

char  name[10];

char sex;

int age;

float score;

char addr[30];

};


 int main(void)

{

struct  Student sda[5] = {

{1001,"xiaoming",'M',20,60.4,"chong qing" },

{1002,"nai lv",'M',23,90,"qingdao"},

{1003,"hong",'w',23,69,"henan"},

{1004,"arrm",'m',33,60,"hill lk" },

{1005,"qinyang",'m,',33,34,"jiao pi gou"}};

int id = 0;

int n = 0;

printf("please input  student id :");

scanf("%d", &id);

for ( n = 0; n < 5; n++)

{

if (id==sda[n].id)

{

printf("%d,%s,%c,%d,%0.3f,%s\n", sda[n].id, sda[n].name,

sda[n].sex, sda[n].age, sda[n].score, sda[n].addr);

break;

}

}

if (n==5)

{

printf("not found\n");

}

getch();

return 0;

}


超人7号
浏览 12024回答 4
4回答

MadMarical

你好。你此时定义了一个id为int型,但是你的输入计算机是没法控制的。int型在内存中开辟的大小有限,你如果输入12345678919010101010010101010101010101010。如此大一串数,如果你进行了异常判断当然没问题,但是你没进行异常判断所以scanf会存在溢出风险,一旦发生溢出不处理,程序就会崩溃,这是为什么报错的原因。而scanf_s输入流则不同,它就是为了避免这种情况而诞生的,比如说输入char a[20] scanf_s("%s",a,20);这样一来,编译器就知道了这个输入长度最多为20,相当于帮你处理了异常。以上是我的浅见,欢迎交流。

H1_Justin

#define _CRT_SECURE_NO_WARNINGS

超人7号

我把scanf();换成scanf_s();就生成通过?我不理解为啥?如果真的在c代码遇到提示代码不安全我应怎么做?求前辈指教啊
打开App,查看更多内容
随时随地看视频慕课网APP