我觉得这很奇怪。
虽然strtod接受'e‘作为输入字符串中的一个字符(准确地说是一个字符)是有意义的,但我发现它也接受'd’。
有人能解释一下吗?
#include < stdio.h >
#include < stdlib.h >
int main ()
{
char *s[] = {"1a1", "1e1", "1d1", "1f1"};
char * pEnd;
double d0, d1, d2, d3;
d0 = strtod (s[0],&pEnd);
d1 = strtod (s[1],NULL);
d2 = strtod (s[2],NULL);
d3 = strtod (s[3],NULL);
printf ("::: [%f] [%f] [%f] [%f] \n", d0, d1, d2, d3);
return 0;
}发布于 2011-06-02 23:27:24
发布于 2011-06-02 23:25:05
你说的“接受”是什么意思?这是我得到的输出
::: [1.000000] [10.000000] [1.000000] [1.000000]strtod (与C中的所有其他转换例程一样)解析字符串,直到找到“不属于”的字符。该字符不被视为错误,它只是被视为终止符。在"1d1"的情况下,只解析第一个"1",解析在'd'处停止。转换的结果是1.0 (理应如此)。
如果您要求strtod从每个调用中返回“结束指针”,您将看到指针指向包含'd'的输入字符串的字符'd' ( 'a'和'f'也是如此)。
如果你得到了不同的结果,那一定是你正在使用的实现的怪癖。
发布于 2011-06-02 23:32:40
使用D而不是E是标记double数据(而不是float)的Fortran方法。您可能正在使用一个标准库,该库接受它作为一个扩展。
https://stackoverflow.com/questions/6216577
复制相似问题