【发布时间】:2015-03-14 10:56:19
【问题描述】:
根据 MSDN:
-
如果无法执行转换或发生下溢,
strtod返回 0。
如果我的字符串等于零(即 0.0000)怎么办?我如何知道转换是否没有错误?
好的,我用下面的代码来验证一下思路:
char *Y = "XYZ";
double MyNum;
char *MyEndPtr;
int Err_Conversion = 0;
errno = 0; //reset
MyNum = strtod (Y, &MyEndPtr);
if ( (MyNum == 0) && (errno != 0) && (strcmp(Y, MyEndPtr) == 0) )
{ Err_Conversion = 1; }
我看到 MyNum = 0,但从来没有看到 Y 的内容复制到 MyEnPtr,或者在这个强制错误中 errno = 0。有什么想法吗?
【问题讨论】:
-
检查
errno。下溢时errno设置为ERANGE。 -
是的,但我的情况与下溢无关。它是关于转换一个数值为零的字符串。
-
strtod(nptr, endp);: 检查*endp如果是无效字符。 -
为什么将
MyEndPtr设为100 的数组?你为什么使用strcmp?我确实发布了有效的代码。 -
@Cornstalks,你是对的。我不需要 100 那里。顺便说一句,我意识到即使转换是强制错误,errno 也将始终为 0。
标签: c error-handling strtod