gpt4 book ai didi

c - 在 C 中使用双指针 (char**) 与 (char*) 的优点?

转载 作者:行者123 更新时间:2023-11-30 20:09:23 25 4
gpt4 key购买 nike

我正在尝试使用以下原型(prototype)实现一个函数。

int     get_next_line(const int fd, char **line) .   

第一个参数是将用于读取的文件描述符

第二个参数是指向将要使用的字符的指针地址保存从文件描述符读取的行。

我所知道的关于传递引用和值的唯一区别是引用允许您修改内容值。但对于给定的原型(prototype),我们有第一个字符的地址,所以我不完全理解双指针的需要。

[已编辑]:我们在 '**line' 中存储一行字符。

我的问题是:

为什么使用 **line 而不仅仅是 *line ,或者为什么不使用?

最佳答案

int get_next_line(int fd, char **line);

这是一个可用的功能。它可能会分配一个暂时足够大小的字符数组,在其中读入一行,如有必要,重新分配并读取剩余部分,然后通过将分配的字符串分配给取消引用的第二个参数(*line = allocate_string;)。

<小时/>
int get_next_line(int fd, char *line);

这完全是无稽之谈。没有办法编写像前一个那样远程可用的 get_next_line 。它无法确定传递给它的字符数组的大小,也无法重新分配该数组。指定此函数表现得稍微合理的唯一方法是要求参数必须是在其他地方指定的某个预定大小的数组。这只能在一些非常狭窄的上下文中有用。

请注意,这并不是一个立即显而易见的观察结果。 C 语言在 2011 年之前就已经开始了。那时的程序员相当粗心。

<小时/>
int get_next_line(int fd, char *line, size_t size);

这可能是一个有点有用的功能。它的工作方式几乎与标准 read 函数一样,只是它不会读取超过第一个行尾字符的内容。 (或者像 Posix fike 句柄的 fgets 一样。)当然,用户需要处理输入行比数组长的情况。如果扫描到字符,get_next_line 可能会返回数字。

<小时/>

注意 const int 在函数原型(prototype)中没有用处。在这种情况下,所有标准函数都指定 int

关于c - 在 C 中使用双指针 (char**) 与 (char*) 的优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820995/

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