标准 C 库函数 strtof
和 strtod
的签名如下:
float strtof(const char *str, char **endptr);
double strtod(const char *str, char **endptr);
它们每个函数都将输入字符串str
分解为三个部分:
- 一个可能为空的初始空白序列
- 表示浮点值的字符“主题序列”
- 一系列未被识别的字符(不影响转换)。
如果endptr
不为NULL
,则将*endptr
设置为指向转换中最后一个字符之后的字符的指针(换句话说,是尾随序列的开头)。
我想知道:endptr
为什么是指向非const
char
指针?*endptr
不是指向const
char
字符串(即输入字符串str
)的指针吗?
strchr
和其它类似的问题,只不过这里我们有一个输出参数指针而不是返回值。 - Steve Jessopstrchr
更棘手,因为你不能在没有显式转换的情况下将const
限定指针的地址传递给这些函数。 - R.. GitHub STOP HELPING ICEstrtoX
函数中隐藏从char const*
到char*
的类型转换。很奇怪。 - Jens Gustedtstrchr
函数,如果输入是“char *”,则返回“char *”,如果输入是“const char *”,则返回“const char *”。尽管在C++标准中没有对strtod
进行这样的重载,但我不知道背后的理由。在任何人询问之前,C++中根本没有strtof
,因为它不在C89中。搜索显示,我长期以来一直无知于此理由:https://dev59.com/BHNA5IYBdhLWcg3wWsiK - Steve Jessop