仅使用 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/