作者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)
1F:推 giveatry:强者大大四连发 07/13 12:19
2F:→ rephansu:两者对"123abc"的反应结果不一样 07/13 15:53
3F:→ UNARYvvv:感谢楼上提醒~我的测资没有测到,还有其他要考虑的情况 07/13 19:23