此函数或变量可能是不安全的 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 2012 的警告?

如何在 Visual Studio 2015 for C 中禁用警告? [复制]

C++ - 'localtime' 这个函数或变量可能不安全

Swift - 检查弱变量是不是为 nil 或不是线程安全的?

在 Go 函数中返回局部数组的一部分是不是安全?

Visual Studio - VB - Windows 窗体项目 - 未声明“变量”。可能无法访问