作者UNARYvvv (有趣生活)
看板C_and_CPP
標題Re: [問題]如何把char轉成int
時間Sun Jul 12 18:53:18 2009
※ 引述《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