c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr)

标签 c string pointers

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 function strtod()

因为该参数旨在向调用者提供信息。因此它必须修改调用者控制的内存,这通常通过传递调用者变量的地址来轻松完成。

可以有一个类型为 char* 的参数,它指向调用者中的单个 char 变量,但这不允许轻松检查结果是否应该被接受(例如,如果要忽略尾随空格)或者是否需要进一步处理输入字符串的其余部分。

拥有 char** 类型允许在解析器中非常舒适地使用 strtoX,它们在使用完它们的部分后留下指向字符串其余部分的指针。

如果类型是char*,只保存strtoX部分消费后的char,则需要定位到通过本质上重新解析数字来进一步解析。

关于c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596503/

相关文章:

c++ - 程序崩溃时如何释放资源

android - 如何更改存储在 strings.xml 中的字符串中某些单词的颜色?

C双字符指针声明和初始化

pointers - 无法反射(reflect)不返回指针,编译器在转换时出现 panic ?

c - 这个C BNF语法不完整吗?

c - 如何读取文件 C,fscanf 结尾

c - 如何使用 pthread_atfork() 和 pthread_once() 重新初始化子进程中的互斥量

Javascript字符串用括号替换短标签

c++ - 如何将输入作为空字符串输入?

c++ - C语言中函数中的switch指针