2011-04-07 4 views
2

아마도 중요한 질문은 아니지만 c로 시작하는 것이 좋습니다. 왜 이것이 올바르게 컴파일되지 않습니까?문자열로 정수를 변환하는 문제가 있습니다.

#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에 포함되어 있지 않을 수 있습니다. wikipedia, http://en.wikipedia.org/wiki/Itoa를 참조하십시오. – thelaws

+1

메인을'int main()'으로 정의하십시오. 더 많은 것 : http://stackoverflow.com/questions/636829/difference-between-void-main-and-int-main – Muggen

+0

모든 질문은 중요합니다 - 누군가를 위해 :-) –

답변

6

대신 sprintf를 사용하십시오. itoa는 C 표준의 일부가 아니며 stdlib 구현에 포함되어 있지 않을 수도 있습니다.

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

UPDATE : 코멘트 현재 snprintf에서 언급 한 바와 같이

는 버퍼 오버 플로우를 방지하기 위해 사용하는 것이 안전합니다. 이 경우 버퍼가 32 비트 (또는 64 비트 정수)에 저장할 수있는 가장 큰 정수보다 길기 때문에 필요하지 않습니다. 그러나 버퍼 오버플로를 염두에 두는 것이 좋습니다.

+2

만약 가능하다면 ** snprintf () ** 버퍼 오버 플로우를 방지합니다. – Ben

+1

+1, 비록 snprintf가 sprintf로 잠재적 인 버퍼 오버 플로우로 인해 더 좋을지라도 (여기에서는 일어나지 않을 것입니다). –

+1

오버플로를 버퍼링 할 수 있다면 snprintf가 더 좋습니다. – GWW

2

itoa입니다 점점 ​​계속, 그것은 구현에 포함되지 않을 수 있습니다. 대신 sprintf과 같은 것을 사용하십시오.

관련 문제