错误:`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++ 的一部分。一些编译器设置(实际上是系统库)将提供该功能。 snprintf
和 sprintf
通常是随处支持的该功能的直接替代品。这就是我们建议它的原因。关于 C 或 C++ 函数,snprintf
和 sprintf
是 C 函数,也可在 C++ 下使用。 C++ 独占等效项将使用 stringstreams
以及 <<
和 >>
运算符。 (或使用boost::lexical_cast
)。【参考方案3】:
查看 stdlib.h。也许 _itoa 而不是 itoa 是在那里定义的。
【讨论】:
这就是我的情况。 #include以上是关于错误:`itoa` 未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章