Sla*_*zer 0 c c++ casting char c++11
我尝试了这种方法将char数字转换为整数位('3' - > 3),它似乎工作.
char c='x';
int i=atoi(&c);
Run Code Online (Sandbox Code Playgroud)
我的问题是,这总是有效吗?
第一个字符后是否总是有一个NULL字符?
使用隐式类型转换还有另一种方法可以做到这一点,但我不确定这是一个好习惯.实际上,我很惊讶即使使用-Wall和-Wextra也没有任何警告.
int i = c - '0';
Run Code Online (Sandbox Code Playgroud)
注意我正在使用GCC 4.8.2和MinGW.
这编译但它是未定义的行为.
A char
只是一个角色.没有空字节跟随.std::atoi
但是期望一个空字节,因此调用std::atoi(&c)
编译但会产生未定义的行为.这条线,
int i = std::atoi("x");
Run Code Online (Sandbox Code Playgroud)
但是,它是明确定义的,因为字符串"x"
是一个以char[2]
null结尾的.
int i = c - '0';
Run Code Online (Sandbox Code Playgroud)
是好的,因为1的C++ 11标准和C99标准2保证的字符数字的顺序.
1 @ShafikYaghmour在你的问题评论中指出
2再次感谢@ShafikYaghmour!