gpt4 book ai didi

c - 为什么这个 MSVC API 是这样定义的?

转载 作者:可可西里 更新时间:2023-11-01 11:21:55 24 4
gpt4 key购买 nike

errno_t _dupenv_s(
char **buffer,
size_t *sizeInBytes,
const char *varname
);

我有几个问题:

  1. 为什么需要指向指针 (**) 的指针而不是指针 (*)?
  2. 为什么 sizeInBytes 是必需的,strlen(buffer) 不可用吗?

最佳答案

msvc 下任何以_s 为后缀的函数都是安全函数,这意味着它不会对传递的数据的完整性做出任何假设。正是出于这个原因,字符串的长度是必需的,因为您不能假设它以 null 终止或根本终止(您可能也只想要一半的字符串,但这是副作用)。

安全函数都返回错误代码,这样就可以在没有错误可能性的情况下进行检查,因此任何返回都需要通过指针发送。看到非安全版本的 strdupdupenv 返回一个 char*,你得到一个双重间接寻址,这样指向变量的指针你通过获取分配缓冲区的地址。

关于c - 为什么这个 MSVC API 是这样定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165875/

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