2011-06-24 47 views
19

我有稱爲itoa.cpp一個示例C文件,如下聲明:錯誤:`itoa`未在此範圍內

#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 

我收到此錯誤:

 
[[email protected] u02]# gcc itoa.cpp -o itoa 
itoa.cpp: In function "int main()": 
itoa.cpp:10: error: "itoa" was not declared in this scope 

什麼是錯誤的代碼?如何擺脫這一點?

+1

您正在使用gcc來編譯一個名爲.cpp的文件,它會將它編譯爲C,不僅如此,而且包含的所有標題都是標準C庫。 –

回答

22

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; 
} 
5

如果你只在基地10,8或16有興趣,你可以使用sprintf

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

如果我使用snprintf作爲提到的Mikola,並編譯程序爲:gcc itoa.cpp -o itoa,我得到這個錯誤:[root @ inhyuvelite1 u02]#gcc itoa.cpp -o itoa /tmp/ccUB2wBP .o :(.eh_frame + 0x12):未定義的引用'__gxx_personality_v0' collect2:ld返回1退出狀態 – vchitta

+5

您應該推薦snprintf over sprintf。 –

+1

@ user771245:您正在使用C編譯器編譯C++代碼。使用g ++。或者將你的文件重命名爲itoa.c –

4

查找到文件stdlib.h。也許_itoa代替itoa在那裏定義。

+0

這是我的情況。 #include Combine