您好我想将ansi-c中的argv转换为int。我不确定一些事情......
int main(int argc, char* argv[])
让我们假设我的程序运行如下./a input1 input2。
我们假设在这种情况下我的input1 = 12345和input2 = 67890
我不想使用atoi。我想把它全部转换成我自己的。例如,当我调用argv [1]它只等于“12345”或者它可能是“12345”?即,它的任何一侧都有空间吗?
atoi和sscanf的问题是,如果我的input1 =“0”且input1 =“abc”
然后atoi和sscanf都会返回0,如果我错了,请纠正我...谢谢!
答案 0 :(得分:6)
C标准库中的字符串到整数转换由strtol
函数(或strto...
组中的其他函数)执行。忘记atoi
和sscanf
- 这些函数不提供错误检测和/或溢出保护。
是否可以在参数周围接收空格取决于传递前导空格和尾随空格的系统特定约定,当然还取决于用户实际传递的内容。通常,如果用户想要这样做,不同的OS提供了传递这些空间的方法。因此,您可以自行决定是否认为此类输入正确或错误。
strtol
基本上允许(并忽略)前导和尾随空格。 atoi
和sscanf
也是如此。
答案 1 :(得分:3)
如果你真的想自己做,你需要遍历字符串,检查每个字符是否为数字。我们假设你使用的是ASCII:
char *str = "624532";
int index = 0;
int value = 0;
while(str[index]) {
if(str[index] >= 48 && str[index] < 58) {
value = (value * 10) + (str[index] - 48);
}
index++;
}
确保使用以null结尾的字符串,否则将永久运行。如果您的输入格式不正确,它也不会非常有用。
答案 2 :(得分:1)
那么scanf怎么样?