【问题标题】:This function or variable may be unsafe visual studio此函数或变量可能是不安全的 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便携“安全”变体是什么?

标签: c++ visual-studio-2012


【解决方案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) 编译器出现此错误。摆脱这个问题很简单。

      1. 转到 VS 上下文菜单Project>Properties
      2. 点击配置>属性>C/C++>预处理器
      3. 编辑预处理器定义并在最后一个空行添加_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
          猜你喜欢
          • 2012-11-13
          • 1970-01-01
          • 2016-10-28
          • 2019-11-27
          • 2015-08-15
          • 2011-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多