此函数或变量可能是不安全的 Visual Studio
Posted
技术标签:
【中文标题】此函数或变量可能是不安全的 Visual Studio【英文标题】:This function or variable may be unsafe visual studio 【发布时间】:2013-10-11 15:25:31 【问题描述】:我在 Visual Studio 上遇到了问题。 我尝试使用“time.h”中的本地时间函数。
Visual Studio 告诉我这是一个不安全的函数。但是,我已经将这个用于我的学校练习。我看到您可以通过进入项目属性、构建选项卡并选中“启用不安全代码”来禁用此不安全错误。
不过,我没有构建选项卡,如您所见: http://puu.sh/4NkYC.png
我使用的是 Windows 7 和 Visual Studio 2012 Ultimate。看起来“构建选项卡”和“启用不安全代码”已经消失了:/ 也许你知道如何解决这个问题?
非常感谢:)
【问题讨论】:
你想到的是 C# 的unsafe
关键字,这是完全不同的。
@SLaks - localtime
的便携“安全”变体是什么?
【参考方案1】:
您可以使用以下指令关闭警告:
#pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS
【讨论】:
【参考方案2】:localtime
被 MS 编译器标记为不安全,因为它返回指向静态分配的 struct tm
的指针。这显然是个坏主意。因此,localtime_s
是微软发明的,它接受一个指向你分配的struct tm
的指针struct tm timeinfo;
localtime_s(&timeinfo, &rawtime);
使用这个(并让您的程序是 Microsoft 特定的)或通过定义 _CRT_SECURE_NO_WARNINGS
来关闭警告。
【讨论】:
【参考方案3】:Visual Studio (VS) 编译器出现此错误。摆脱这个问题很简单。
-
转到 VS 上下文菜单Project>Properties。
点击配置>属性>C/C++>预处理器。
编辑预处理器定义并在最后一个空行添加_CRT_SECURE_NO_WARNINGS。
这个编译警告将会消失。
【讨论】:
【参考方案4】:unsafe
是 C# 而非 C++ 的一部分。比如这些docs明确说
/unsafe(C# 编译器选项)
在顶部
在 C++ 中,Visual Studio 会抱怨它认为是不安全的函数,并建议你#define _CRT_SECURE_NO_WARNINGS
,如果你不想要很多警告,例如
localtime
可能会为您提供以下信息:
警告 C4996:“本地时间”:此函数或变量可能不安全。 考虑改用 localtime_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。
【讨论】:
【参考方案5】:#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char counter_str[10];
int main()
time_t my_time = time(NULL)// declaring argument of time();
sprintf(counter_str,ctime(&my_time));//fetch current time
printf(counter_str);
【讨论】:
因为这可能会回答问题,所以最好在提供的代码中包含一些简短的解释或描述。 #define _CRT_SECURE_NO_WARNINGS以上是关于此函数或变量可能是不安全的 Visual Studio的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2015 for C 中禁用警告? [复制]
C++ - 'localtime' 这个函数或变量可能不安全