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

Alphanumeric to numeric in c ambiguity

本文关键字:数字 歧义      更新时间:2023-10-16

All,

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

不执行任何转换,返回零。

显然,如果我传递的字符串"0",这可能是一个歧义,所以 atol 将返回与先例相同的零。

由于函数签名是 int atoi() 或长 atol(),返回的值可能是 int 或 long,因此返回值在所有情况下都将与返回的 real int 值匹配(我的意思是即使 atoi 为无数字字符串返回负值,此返回值与它本身的该值的字符串的转换匹配)歧义仍然存在

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

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

(int)strtol()

您可以传递字符 * 来验证转换

ato...组中的函数几乎没有有意义的实际用途。要执行此转换或检查输入字符串的格式是否正确,请使用组中strto...函数。

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

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

如果你使用的是 c++11,你可以使用位于字符串>

它既不安全也不不安全。它根本不做。这是否"安全"取决于您已经执行了验证输入的操作。如果您希望验证作为文本到值转换的一部分,strtol提供了更多信息。