一尘不染

字符串转换为数字的问题(strtod)

linux

我使用strtod()函数将环境变量提取为字符串,然后使用strtod将其更改为double:

enter code here
 char strEnv[32];
 strncpy(strEnv, getenv("LT_LEAK_START"), 31);
 // How to make sure before parsing that env LT_LEAK_START is indeed a number?
 double d = strtod(strEnv, NULL);

现在,我要确保用户输入的此数字是数字,而不是字符串或特殊字符。我如何确定呢?

代码段将有很大的帮助。

提前致谢。


阅读 282

收藏
2020-06-07

共1个答案

一尘不染

strtod函数的第二个参数很有用。

char *err;
d = strtod(userinput, &err);
if (*err == 0) { /* very probably ok */ }
if (!isspace((unsigned char)*err)) { /* error */ }

编辑:添加示例

strtod函数尝试将第一个参数的初始部分转换为双精度,并在没有更多字符或无法使用双精度字符的情况下停止。

输入结果
---------- ----------------------------
“ 42foo”将返回42
              并让err指向“ foo”(* err =='f')

“ 4.5”将返回4.5
              并让err指向空字符串(* err == 0)

“ 42”将返回42
              并让`err`指向空格(* err =='')
2020-06-07