double strtod(const char *str, char **endptr);
参数endptr 是一个指向指针的指针。停止扫描的字符的地址存储在endptr指向的指针中。
为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr)。
谢谢。
最佳答案
why bother using
(char **endptr)
instead of(char ch)
or(char *chptr)
in the functionstrtod()
因为该参数旨在向调用者提供信息。因此它必须修改调用者控制的内存,这通常通过传递调用者变量的地址来轻松完成。
可以有一个类型为 char*
的参数,它指向调用者中的单个 char
变量,但这不允许轻松检查结果是否应该被接受(例如,如果要忽略尾随空格)或者是否需要进一步处理输入字符串的其余部分。
拥有 char**
类型允许在解析器中非常舒适地使用 strtoX
,它们在使用完它们的部分后留下指向字符串其余部分的指针。
如果类型是char*
,只保存strtoX
部分消费后的char
,则需要定位到通过本质上重新解析数字来进一步解析。
关于c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596503/