字母数字到数字在 c 歧义中
Alphanumeric to numeric in c ambiguity
All,
检查和隐蔽字符串是否为数字的函数,例如 atol 和 atoi ...我在 atol 描述中检查了 c/c++ 引用,在字符串中没有任何数字的情况下,它是这样写的。
不执行任何转换,返回零。
显然,如果我传递的字符串"0"
,这可能是一个歧义,所以 atol 将返回与先例相同的零。
由于函数签名是 int atoi() 或长 atol(),返回的值可能是 int 或 long,因此返回值在所有情况下都将与返回的 real int 值匹配(我的意思是即使 atoi 为无数字字符串返回负值,此返回值与它本身的该值的字符串的转换匹配)歧义仍然存在
检查字符串是否为数字或不使用此函数是否不安全?对于这种情况,好的解决方案是什么?
使用 strtol
或 strtoll
,它们返回第一个无效字符的位置,以便您知道是否发生了任何转换。
(int)strtol()
您可以传递字符 * 来验证转换
ato...
组中的函数几乎没有有意义的实际用途。要执行此转换或检查输入字符串的格式是否正确,请使用组中strto...
函数。
除了返回转换后的实际值外,组中strto...
函数还会告诉您输入字符串中的哪个字符导致转换过程停止。此外,这些函数会将全局errno
变量设置为ERANGE
,以防溢出。通过在调用后分析这些附加数据,您可以准确判断转换是否成功。
同时,ato...
功能不提供有意义的诊断功能。它们还会在溢出时触发未定义的行为。
如果你使用的是 c++11,你可以使用位于字符串>
它既不安全也不不安全。它根本不做。这是否"安全"取决于您已经执行了验证输入的操作。如果您希望验证作为文本到值转换的一部分,strtol
提供了更多信息。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 构造对象的歧义
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 字母数字到数字在 c 歧义中