2011-04-07 51 views
2

也许不是一个非常重要的问题,但只是开始在c。 这为什么不能正确编译?问题itoa转换整数到字符串

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

void main() 
{ 
int i = 15; 
char word[100]; 

itoa (i,word,10); 

printf("After conversion, int i = %d, char word = %s", i, word); 
} 

我不断收到错误消息

Undefined symbols: 
"_itoa", referenced from: 
_main in ccubsVbJ.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+1

这是一个非标准函数,可能不包含在您的stdlib.h中。见维基百科,http://en.wikipedia.org/wiki/Itoa – thelaws 2011-04-07 01:57:00

+1

定义你的main为'int main()'。更多在这里:http://stackoverflow.com/questions/636829/difference-between-void-main-and-int-main – Muggen 2011-04-07 01:58:12

+0

所有问题都很重要 - 对于某人:-) – 2011-04-07 02:13:43

回答

6

改为使用sprintf,itoa不是C标准的一部分,它可能不包含在stdlib实现中。

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

UPDATE:

正如评论指出的snprintf更安全使用,以避免缓冲区溢出。在这种情况下,它不是必需的,因为您的缓冲区比可以存储在32位(或64位整数)中的最大整数长。但记住缓冲区溢出是很好的。

+2

如果可用,您应该使用** snprintf( )**以避免缓冲区溢出。 – Ben 2011-04-07 02:06:20

+1

+1,尽管snprintf会更好,因为sprintf可能会发生缓冲区溢出(尽管这里不会发生)。 – 2011-04-07 02:09:19

+1

我同意snprintf更好,如果你可以缓冲溢出。 – GWW 2011-04-07 02:11:31

2

itoa是一个非标准的功能,它可能不包含在您的实现。改为使用类似sprintf的东西。