c歧义中的字母数字到数字

时间:2012-12-10 09:14:10

标签: c++ c

全部,

检查和隐藏字符串是否为数字的函数,如atol和atoi ... 我在atol描述中检查了c / c ++引用,并且在字符串中没有任何数字的情况下它是这样编写的。

  

不执行转换,返回零。

显然,如果我传递的字符串是"0",那么这可能是一种歧义,因此atol将返回与先前案例相同的零。

由于函数签名是int atoi()或long atol(),返回的值可能是int或long,因此返回的值在所有情况下都匹配real int的返回值。(我的意思是即使atoi为无数字字符串返回负值此返回值与此值的字符串转换匹配(自身)模糊性持续

检查字符串是不安全的,如果它是数字或不使用此函数? 对于这种情况,什么是好的解决方案?

5 个答案:

答案 0 :(得分:4)

使用strtolstrtoll,他们会返回第一个无效字符的位置,以便您知道是否发生了任何转化。

答案 1 :(得分:2)

(int)strtol()

您可以传递char *以验证转化

答案 2 :(得分:2)

ato...组的功能实际上没有任何实际用途。为了执行此转换或检查输入字符串是否具有正确的格式,请使用strto...组中的函数。

除了返回转换后的实际值外,strto...组中的函数还会告诉您输入字符串中的哪个字符导致转换过程停止。此外,这些函数会在溢出的情况下将全局errno变量设置为ERANGE。通过在通话后分析这些额外数据,您可以准确判断转换是否成功。

同时,ato...函数没有提供有意义的诊断功能。它们还会在溢出时触发未定义的行为。

答案 3 :(得分:1)

如果您使用的是c ++ 11,则可以使用位于<中的stoi()。字符串>。如果转换失败,它将抛出异常: http://en.cppreference.com/w/cpp/string/basic_string/stol

答案 4 :(得分:0)

既不安全也不安全。它根本不这样做。这是否“安全”取决于您已经完成的验证输入的内容。如果您希望验证是将文本转换为值的一部分,strtol会为您提供更多信息。