Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

error C4996: 'scanf': This function or variable may be unsafe in c programming

Tags:

I have created a small application to find max number by using user-defined function with parameter. When I run it, it shows this message

Error 1 error 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.

What do I do to resolve this?

This is my code

#include<stdio.h>  void findtwonumber(void); void findthreenumber(void);  int main() {     int n;     printf("Fine Maximum of two number\n");     printf("Fine Maximum of three number\n");      printf("Choose one:");     scanf("%d", &n);     if (n == 1)     {         findtwonumber();     }     else if (n == 2)     {         findthreenumber();     }     return 0; }  void findtwonumber(void) {     int a, b, max;     printf("Enter a:");     scanf("%d", &a);     printf("Enter b:");     scanf("%d", &b);     if (a>b)         max = a;     else         max = b;     printf("The max is=%d", max); }  void findthreenumber(void) {     int a, b, c, max;     printf("Enter a:");     scanf("%d", &a);     printf("Enter b:");     scanf("%d", &b);     printf("Enter c:");     scanf("%d", &c);     if (a>b)         max = a;     else if (b>c)         max = b;     else if (c>a)         max = c;     printf("The max is=%d", max); } 
like image 783
Chheang Phearum Avatar asked Jun 01 '15 15:06

Chheang Phearum


People also ask

Why is scanf unsafe in C?

It sounds like it's just a compiler warning. Usage of scanf_s prevents possible buffer overflow. So as suggested, you can try replacing scanf with scanf_s or disable the compiler warning.

What are the limitations of scanf () and how can it be avoided?

The problems with scanf are (at a minimum): using %s to get a string from the user, which leads to the possibility that the string may be longer than your buffer, causing overflow. the possibility of a failed scan leaving your file pointer in an indeterminate location.

What can I use instead of scanf in C?

There is no alternative for the scanf() in C language but there are some functions which can replace some of its functionality. They are gets() and getch(). But please note that the scanf() can read a wide range of values of different data types.


1 Answers

It sounds like it's just a compiler warning.

Usage of scanf_s prevents possible buffer overflow.
See: http://code.wikia.com/wiki/Scanf_s

Good explanation as to why scanf can be dangerous: Disadvantages of scanf

So as suggested, you can try replacing scanf with scanf_s or disable the compiler warning.

like image 189
user3742467 Avatar answered Sep 17 '22 11:09

user3742467