编译中出现 This function or variable may be unsafe.

消除方法:

1、 在文件开头添加:#define _CRT_SECURE_NO_WARNINGS (试过,不行)

2、 在 项目->属性->C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_WARNINGS

2、忽略警告

1.#pragma warning(disable:4996)

3、VC\VS2005\VS2008\VS2010 消除、忽略、加强警告Warning

编译器:warning  CXXXX

VC中#pragma warning指令

该指令允许有选择性的修改编译器的警告消息的行为
指令格式如下:

#pragma warning( warning-specifier : warning-number-list [; warning-specifier : warning-number-list...]
#pragma warning( push[ ,n ] )
#pragma warning( pop ) 


主要用到的警告表示有如下几个:

once:只显示一次(警告/错误等)消息
default:重置编译器的警告行为到默认状态
1,2,3,4:四个警告级别
disable:禁止指定的警告信息
error:将指定的警告信息作为错误报告



如果大家对上面的解释不是很理解,可以参考一下下面的例子及说明

#pragma warning( disable : 4507 34; once : 4385; error : 164 )  
#pragma warning(disable:4507 34)  // 不显示4507和34号警告信息  
#pragma warning(once:4385)        // 4385号警告信息仅报告一次  
#pragma warning(error:164)        // 把164号警告信息作为一个错误。  
同时这个pragma warning 也支持如下格式:  
#pragma warning( push [ ,n ] )  
#pragma warning( pop )  
这里n代表一个警告等级(1---4)。  
#pragma warning( push )保存所有警告信息的现有的警告状态。  
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告  
等级设定为n。   
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的  
一切改动取消。例如:  
#pragma warning( push )  
#pragma warning( disable : 4705 )  
#pragma warning( disable : 4706 )  
#pragma warning( disable : 4707 )  
#pragma warning( pop )



在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)

在使用标准C++进行编程的时候经常会得到很多的警告信息,而这些警告信息都是不必要的提示,
所以我们可以使用#pragma warning(disable:4786)来禁止该类型的警告

在vc中使用ADO的时候也会得到不必要的警告信息,这个时候我们可以通过

#pragma warning(disable:4146)来消除该类型的警告信息

连接器: warning LNKXXXX

error C4996 : ‘strcpy‘: This function or variable may be unsafe . Consider using strcpy_s instead.
出现这个错误时,是因为strcpy 函数 安全 造成的溢出。 解决方法是:找到【项目属性】,点击【 C++ 】里的【预处理器】,对【预处理器】进行编辑,在里面加入一段代码:_CRT_SECURE_NO_WARNINGS。
warning C4996 : '_ vs nprintf': This function or variable may be unsafe . ...... warning C4996 : strcpy was declared deprecated 出现这样的 警告 ,是因为VC2005之后的版本中认为CRT中的一组 函数 如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等 安全 问题。这些函...
关闭在 VS 环境下的 安全 警告 习惯在gcc上编译程序的 开发 们,如果转用 VS (visual studio)进行 开发 C程序的话,肯定非常讨厌 VS 安全 监测功能,能在GCC编译通过的在 VS 中却不能通过,简单举个例子,scanf 函数 ,在 VS 必须写作scanf_s并加相应的参数才能通过编译并执行。 这里 VS 会报出一个error, C4996 ,假设 开发 者刚接触这个的话,肯定一头雾水,不知到怎么去修改。下面例举两
VS 2012写程序时,经常遇到error C4996 : ‘strcpy’: This function or variable may be unsafe .之类的错误提示。网上查原因是因为这些C库 函数 很多没有内部检查,微软担心这些 函数 可能造成栈溢出,所以改写了这些 函数 ,并在原来的 函数 名字后加上_s以和C库 函数 区分,比如strcpy->strcpy_s,fopen->fopen_s等。 解决方法: (1)、把原来所有的 函数 名全部改成微软改写后的 函数 名,但是这样比较麻烦。 (2)、属性》c/ c++
其中,dest表示目标字符串,src表示源字符串,n表示要复制的字符数。 如果源字符串的长度小于n,则目标字符串中剩余的字符将用空字符填充。如果源字符串的长度大于等于n,则目标字符串不会以空字符结尾。 下面是一个例子: char str1[] = "Hello, world!"; char str2[6]; strncpy (str2, str1, 5); printf("%s", str2); 输出结果为: Hello