2010-04-02 29 views
1

我有一個字符串初始化{'\ 0'}每次ia循環和存儲一些字符在它從0到9範圍內,當我轉換atoi(溫度)其中溫度=「2」它返回我20而不是2什麼我必須做的才能獲得準確的數值,需要幫助。我在ansi c中使用atoi()方法發現問題?

+4

您應該發佈您正在使用的代碼,否則人們只能隨機猜測發生了什麼問題。 – sth 2010-04-02 06:45:47

+1

你能發表一些代碼嗎? – 2010-04-02 06:45:48

+2

在帖子中標點符號也會有很大的幫助。我很難理解一個子句的開始和結束。你每次在一個循環中初始化字符串,還是每次在循環中存儲字符?或兩者? – 2010-04-02 07:27:09

回答

0

幾件事情要檢查:

  • 你有沒有重新終止字符串,將你的性格(S)後?
  • 你是否爲整個字符串分配了足夠的內存,包括新的空終止符?

像這樣的東西應該工作:

char buffer[2] = {'\0'}; // note "[2]" to set aside two bytes 
buffer[0] = '2'; 
buffer[1] = '\0'; // ensure it's still terminated 
printf("%d\n", atoi(buffer)); 
+0

您沒有足夠的信息來回答這個問題;另外還有'char buffer [2] = {'\ 0'};'** all **'buffer [x]'(在這種情況下爲0和1)保證爲零。沒有必要做'buffer [1] ='\ 0';'所以它不能成爲問題的原因。 – 2010-04-02 07:22:22

+0

你對第一次迭代中的空終止是正確的,但是因爲(如你所說)我們沒有代碼,我們不知道OP是否正在重用緩衝區,或者他每次投入多少個字符時間周圍。明確的無效終止,儘管有時過度殺傷,但始終是安全的。 我想出了一個部分答案,這可能有助於解決,也可能無助於解決問題。我想你不同意。 – 2010-04-02 07:38:43

2

不管有越來越atoi工作你的問題是什麼,你應該寧願使用strtol。從libc的信息手冊:

- 功能:INT的atoi(爲const char * STRING)

This function is like `atol', except that it returns an `int'. 
The `atoi' function is also considered obsolete; use `strtol' 
instead 

例如如何使用strtol將見this answer

0

我想,問題不是atoi,應該是別的。請檢查指針,一步一步調試等。