c - 确定字符串是 ANSI C 中的整数还是 float

标签 c floating-point numbers

仅使用 ANSI C,确定 C 样式字符串是整数还是实数(即 float / double )的最佳方法是什么?

最佳答案

不要使用 atoi 和 atof,因为这些函数在失败时返回 0。上次我检查 0 是一个有效的整数和 float ,因此没有用于确定类型。

使用 strto{l,ul,ull,ll,d} 函数,因为这些函数会在失败时设置 errno,并报告转换数据的结束位置。

strtoul:http://www.opengroup.org/onlinepubs/007908799/xsh/strtoul.html

此示例假定字符串包含要转换的单个值。

#include <errno.h>

char* to_convert = "some string";
char* p = to_convert;
errno = 0;
unsigned long val = strtoul(to_convert, &p, 10);
if (errno != 0)
    // conversion failed (EINVAL, ERANGE)
if (to_convert == p)
    // conversion failed (no characters consumed)
if (*p != 0)
    // conversion failed (trailing data)

感谢 Jonathan Leffler 指出我忘记先将 errno 设置为 0。

关于c - 确定字符串是 ANSI C 中的整数还是 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/78474/

相关文章:

c - 在 C 中我可以声明一个常量字符数组吗?

c - 带有换行符的 printf 导致奇怪的段。过错

ios - iOS中的随机数?

python 如何使用通配符查找数字

c++ - 将 int** 转换为 "pointer to a two-dimensional array of integers with fixed number of elements per column"

c - bsearch 和搜索范围?

javascript - 在散列函数中使用 Javascript 中的 float

c++ - 如何处理浮点计算中的超精度?

php - 我怎样才能确保一个 float 总是被 PHP 舍入?

c - 找出出现次数超过 N/3 的数