2011-03-25 1307 views
10

我想一個整數轉換爲字符寫入一個文件,使用該行:C錯誤:未定義參考「_itoa」

fputc(itoa(size, tempBuffer, 10), saveFile); 

,我收到此警語和信息:

警告: 'itoa'

未定義的引用 '_itoa'

我已經列入STDLIB的隱式聲明。 h,並正在編譯:

gcc -Wall -pedantic -ansi 

任何幫助將不勝感激,謝謝。

+1

我猜測itoa可能不存在於您正在使用的標準C庫中。你可以嘗試指定標誌'-fpermissive'來查看代碼是否有效。 – GWW 2011-03-25 04:46:21

+1

「官方」標準庫中沒有'itoa'這樣的函數。顯然你使用的標準庫不提供'itoa'。你的'pedantic'和'-ansi'標誌將無濟於事。恰恰相反,他們實際上可以通過隱藏非標準功能使事情變得更糟(我不知道他們是否真的這麼做)。嘗試編譯沒有他們。 – AnT 2011-03-25 04:49:42

回答

22

itoa不是標準的一部分。我懷疑-ansi阻止你使用它,或者它根本不可用。

我會建議使用sprintf()

如果用C99標準走,你可以使用snprintf()這當然是安全的。

char buffer[12]; 
int i = 20; 
snprintf(buffer, 12,"%d",i); 
+1

您需要更大的緩衝區來處理負號。 – RocketRoy 2014-02-01 03:22:00

+1

@RocketRoy它其實只是一個例子。例子中的值'20'恰好適合'char [10]',這就是OP使用的緩衝區大小。但是,是的,一個有符號的32位int將需要'char [12]'來處理符號和'\ 0' – 2014-02-01 05:21:11

+1

@BrianRoach,而你是完全正確的,爲了喜歡複製粘貼的人的緣故,我改變了大小示例中的緩衝區。 – chacham15 2014-02-01 07:27:48

2

這在這裏告訴你,在編譯階段itoa是未知的:

warning: implicit declaration of 'itoa'

因此,如果此功能在您的系統,您缺少聲明它的頭文件上。然後編譯器會假定它是一個函數,它接受非特定數量的參數並返回一個int

這距離裝載階段

undefined reference to '_itoa'

消息解釋說,還裝載機沒有找到任何他知道的圖書館這樣的功能。

所以你應該遵循Brian的建議,用標準函數代替itoa