我需要检查字符串是否可以转换为double,字符串可以是
.
,"36"
(我不希望这个是双倍的),等等。
如果我使用下面的代码,它可以识别"36.5C"
是一个字符串,这是我想要的,但它无法识别"36.5C"
是双。如果我在"36"
语句中删除"pEnd!=NULL"
,则该函数无法识别if
是否为字符串。
"36.5C"
答案 0 :(得分:3)
strtod会将pEnd设置为指向参与计算双精度的字符后的第一个字符。
输入“36.5C”实际上是:
'3', '6', '', '5', 'C', '\ 0'
其中'\ 0'表示字符串终止。
所以strtod会给你d = 36.5而pEnd会指向'C'。
因此,由于pEnd,你的if语句将给出true!= NULL
输入“36”实际上是:
'3', '6', '\ 0'
所以strtod会给你d = 36.0而pEnd将指向到'\ 0',即用于双精度的第一个字符。
因此,由于pEnd指向'\ 0',但是pEnd本身不是NULL,所以你的if语句将再次给出true,因为pEnd!= NULL。
也许你想要
*pEnd!='\0' // note the *
在if语句中使用来检查是否所有字符都用于转换。