看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《su31o4gj83 (哈哈哈哈哈哈哈哈哈哈哈)》之銘言: : 現在有三種方法: atoi, sstream, C++0x : 我自己是只有想到atoi : sstream是完全都是C++的寫法, 但我覺得稍嫌冗長 : 至於C++0x的用法我就不甚了解了, 最近才開始慢慢接觸一些C++0x的文件 : atoi的寫法如下: : #include <iostream> : using namespace std; : int main(){ : string ch = "10"; : cout << atoi( ch.c_str() ) + 2 << endl; : getchar(); : return 1; : } : 字串部分已經用string管理, 所以應該不用擔心記憶體overflow的問題 : 這幾個方法的優缺點, 有人可以幫忙分析一下嗎 ?? 討論只用 C 的狀況 文字轉數字,其實還有另外兩種較好的作法:strtol 和 sscanf 而不要用 atoi / atol 雖然原發問po的狀況是預期輸入數字,實際應用上難保手滑打個 "abc" 進來 而 atoi("abc") 也會回傳 0 所以當你得到 0 這個值的時候,也許 user 並不是真的輸入 "0" 以下片段,可以修改 s 陣列的內容來觀察一下結果: char s[]="abc", *error; int ret, num1, num2; num1 = (int)strtol(s, &error, 10); if (*error != 0) puts("invalid input"); else printf("use strtol: %d\n", num1); ret = sscanf(s, "%i", &num2); if (ret != 1) puts("invalid input"); else printf("use sscanf: %d\n", num2); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.2.150 ※ 編輯: UNARYvvv 來自: 122.126.2.150 (07/12 18:54)
giveatry:強者大大四連發 07/13 12:19
rephansu:兩者對"123abc"的反應結果不一樣 07/13 15:53
UNARYvvv:感謝樓上提醒~我的測資沒有測到,還有其他要考慮的情況 07/13 19:23