全部,
检查和隐藏字符串是否为数字的函数,如atol和atoi ... 我在atol描述中检查了c / c ++引用,并且在字符串中没有任何数字的情况下它是这样编写的。
不执行转换,返回零。
显然,如果我传递的字符串是"0"
,那么这可能是一种歧义,因此atol将返回与先前案例相同的零。
由于函数签名是int atoi()或long atol(),返回的值可能是int或long,因此返回的值在所有情况下都匹配real int的返回值。(我的意思是即使atoi为无数字字符串返回负值此返回值与此值的字符串转换匹配(自身)模糊性持续
检查字符串是不安全的,如果它是数字或不使用此函数? 对于这种情况,什么是好的解决方案?
答案 0 :(得分:4)
答案 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
会为您提供更多信息。