错误:`itoa` 未在此范围内声明

Posted

技术标签:

【中文标题】错误:`itoa` 未在此范围内声明【英文标题】:error: `itoa` was not declared in this scope 【发布时间】:2011-06-24 03:15:14 【问题描述】:

我有一个名为 itoa.cpp 的示例 c 文件,如下所示:

#include <stdio.h>
#include <stdlib.h>

int main ()

  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  itoa (i,buffer,10);
  printf ("decimal: %s\n",buffer);
  return 0;

当我用下面的命令编译上面的代码时:

gcc itoa.cpp -o itoa

我收到此错误:

[root@inhyuvelite1 u02]# gcc itoa.cpp -o itoa itoa.cpp:在函数“int main()”中: itoa.cpp:10:错误:“itoa”未在此范围内声明

这段代码有什么问题?如何摆脱这种情况?

【问题讨论】:

您正在使用 gcc 编译一个名为 .cpp 的文件,这会将其编译为 C,不仅如此,您包含的所有头文件都是标准 C 库。 【参考方案1】:

itoa 不是 ansi C 标准,您应该避免使用它。如果你真的想使用它,这里有一些你自己的实现:

http://www.strudel.org.uk/itoa/

如果您需要在内存中格式化字符串,更好的选择是使用 snprintf。从你的例子中工作:

#include <stdio.h>
#include <stdlib.h>

int main ()

  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  snprintf(buffer, sizeof(buffer), "%d", i);
  printf ("decimal: %s\n",buffer);
  return 0;

【讨论】:

【参考方案2】:

如果您只对基数 10、8 或 16 感兴趣。您可以使用sprintf

sprintf(buf,"%d",i);

【讨论】:

如果我使用 Mikola 中提到的 snprintf,并将程序编译为:gcc itoa.cpp -o itoa,我会收到此错误:[root@inhyuvelite1 u02]# gcc itoa.cpp - o itoa /tmp/ccUB2wBP.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status 你应该推荐 snprintf 而不是 sprintf。 @user771245:您正在使用 C 编译器编译 C++ 代码。使用 g++。或者将您的文件重命名为 itoa.c @user771245:通常gcc 用于.c 文件,g++ 用于.cpp 文件。 @vchitta: itoa 根本不是默认 c 或 c++ 的一部分。一些编译器设置(实际上是系统库)将提供该功能。 snprintfsprintf 通常是随处支持的该功能的直接替代品。这就是我们建议它的原因。关于 C 或 C++ 函数,snprintfsprintf 是 C 函数,也可在 C++ 下使用。 C++ 独占等效项将使用 stringstreams 以及 &lt;&lt;&gt;&gt; 运算符。 (或使用boost::lexical_cast)。【参考方案3】:

查看 stdlib.h。也许 _itoa 而不是 itoa 是在那里定义的。

【讨论】:

这就是我的情况。 #include

以上是关于错误:`itoa` 未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

未在此范围内声明 CvSVM 错误

C++ 错误:未在此范围内声明类/对象

Arduino:错误:“abs”未在此范围内声明

C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明

错误:to_string 未在此范围内声明

错误:____未在此范围内声明