【问题标题】:'itoa': The POSIX name for this item is deprecated'itoa':不推荐使用此项目的 POSIX 名称
【发布时间】:2017-10-24 17:20:00
【问题描述】:

我正在尝试通过这样做将int 转换为string

int id = 12689;
char snum[MAX];
itoa(id, snum, 10);

我收到以下错误:

'itoa':不推荐使用此项目的 POSIX 名称。相反,请使用符合 ISO C 和 C++ 标准的名称:_itoa。

【问题讨论】:

  • 你在使用 Visual Studio 吗?
  • 好吧,按照编译器告诉你的去做。
  • 不管 Visual Studio 告诉您什么,都有 no 标准函数名为 itoa_itoa。除非您正在寻找花哨的东西,否则snprintf() 应该足够好了。
  • 然后在包含头文件之前使用#define _CRT_NONSTDC_NO_DEPRECATE

标签: c itoa


【解决方案1】:

那是 MSVC 对你做的。如果您在任何库#includes

之前添加以下行
#define _CRT_NONSTDC_NO_DEPRECATE

警告被抑制,许多其他功能也类似。

此外,如果您也添加这两行,MSVC 将停止告诉您使用 scanf_s 而不是标准函数 scanf(和其他)。

#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE  

【讨论】:

    【解决方案2】:

    请使用snprintf,它比itoa更便携。

    char buffer[10];
    int value = 234452;
    snprintf(buffer, 10, "%d", value);
    

    itoa is not part of standard C, nor is it part of standard C++;但是,很多编译器和相关库都支持它。

    【讨论】:

    • 重命名的注释只是为了使函数名符合 C / C++ 关于继续下划线_itoa 优先于itoa 的命名约定;但是,无论哪种情况,itoa 函数的存在都不是标准 C,即使它很常见。它依赖于编译器,并且需要重写以使移植应用程序更容易。
    【解决方案3】:

    C 标准库中从来没有标准的itoa 函数。因此,无论如何尝试使用它都不是一个好主意。在 C 中,您拥有来自 sprintf 系列的函数,它们会很乐意为您执行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 2017-08-19
      • 2019-04-06
      • 2011-01-10
      • 2018-03-02
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      相关资源
      最近更新 更多