我有一個字符串初始化{'\ 0'}每次ia循環和存儲一些字符在它從0到9範圍內,當我轉換atoi(溫度)其中溫度=「2」它返回我20而不是2什麼我必須做的才能獲得準確的數值,需要幫助。我在ansi c中使用atoi()方法發現問題?
回答
幾件事情要檢查:
- 你有沒有重新終止字符串,將你的性格(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));
您沒有足夠的信息來回答這個問題;另外還有'char buffer [2] = {'\ 0'};'** all **'buffer [x]'(在這種情況下爲0和1)保證爲零。沒有必要做'buffer [1] ='\ 0';'所以它不能成爲問題的原因。 – 2010-04-02 07:22:22
你對第一次迭代中的空終止是正確的,但是因爲(如你所說)我們沒有代碼,我們不知道OP是否正在重用緩衝區,或者他每次投入多少個字符時間周圍。明確的無效終止,儘管有時過度殺傷,但始終是安全的。 我想出了一個部分答案,這可能有助於解決,也可能無助於解決問題。我想你不同意。 – 2010-04-02 07:38:43
不管有越來越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。
我想,問題不是atoi,應該是別的。請檢查指針,一步一步調試等。
- 1. 問題,我用C++方法
- 2. ANSI-C的fscanf問題
- 3. 如何在ANSI-C++中實現UIView方法?
- 4. ,我發現問題在SSRS
- 5. 在C中使用atoi()函數
- 6. atoi()方法,char * cout
- 7. 使用ANSI C
- 8. 從Ruby調用ANSI C方法
- 9. 問題()在C#.net方法
- 10. C#問題與使用方法
- 11. 問題,使用C#迭代方法
- 12. 在C++中重新實現散列,rehash()方法中的問題
- 13. Objective C方法[發佈]問題
- 14. ansi c意外行爲的問題?
- 15. 在ansi c中使用fgets打開文件時出現錯誤
- 16. 在通用訪問器函數中使用void指針ANSI C
- 17. 方法減法問題c#
- 18. 在Objective-c問題中訪問委託靜態方法問題
- 19. 使用C#在Linq中的Zip方法有什麼問題?
- 20. 在c#中使用List.AddRange(Array)方法有什麼問題?
- 21. 在emacs中使用ansi-term時換行符問題
- 22. 使用atoi
- 23. 使用的atoi
- 24. 使用方法的問題
- 25. 開發方法問題
- 26. C++ - 使用atoi()時出現未處理的異常
- 27. 發現問題
- 28. iOS Objective C方法問題
- 29. C++方法簽名問題
- 30. ANSI C - 使用的typedef
您應該發佈您正在使用的代碼,否則人們只能隨機猜測發生了什麼問題。 – sth 2010-04-02 06:45:47
你能發表一些代碼嗎? – 2010-04-02 06:45:48
在帖子中標點符號也會有很大的幫助。我很難理解一個子句的開始和結束。你每次在一個循環中初始化字符串,還是每次在循環中存儲字符?或兩者? – 2010-04-02 07:27:09