gpt4 book ai didi

c - strtod 接受 "e"但也接受 "d"—— 为什么?

转载 作者:太空狗 更新时间:2023-10-29 15:59:42 25 4
gpt4 key购买 nike

我觉得这很奇怪。

虽然 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;
}

最佳答案

“接受”是什么意思?这是我得到的输出

::: [1.000000] [10.000000] [1.000000] [1.000000]

strtod(与 C 中的所有其他转换例程一样)解析字符串,直到找到“不属于”的字符。该字符不被视为错误,它仅被视为终止符。在 "1d1" 的情况下,仅解析第一个 "1" 并且解析在 'd' 处停止。转换的结果是 1.0(应该是)。

如果您要求 strtod 从每次调用中返回“结束指针”,您会看到该指针指向输入字符串的字符 'd' 'd'在其中(同样适用于'a''f')。

如果您得到不同的结果,那一定是您所使用的实现的一个怪癖。

关于c - strtod 接受 "e"但也接受 "d"—— 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com