谁能给我一个_dupenv_s的示例代码?

use*_*410 14 c++ visual-c++

我正在使用getenv("TEMP"),但我收到警告告诉我使用_dupenv_s.

我在网上找不到_dupenv_s的例子.

文档内容如下:

errno_t _dupenv_s(
   char **buffer,
   size_t *numberOfElements,
   const char *varname
);
Run Code Online (Sandbox Code Playgroud)

但他们指的是什么缓冲?我只有varname.避免使用缓冲区不是更好吗?

Jon*_*ter 29

_dupenv_s是一个Microsoft功能,设计为更安全的形式getenv.

_dupenv_s分配缓冲区本身; 你必须传给指针指针,并将其设置为新分配的缓冲区的地址.

例如,

char* buf = nullptr;
size_t sz = 0;
if (_dupenv_s(&buf, &sz, "EnvVarName") == 0 && buf != nullptr)
{
    printf("EnvVarName = %s\n", buf);
    free(buf);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您负责释放返回的缓冲区.

  • 海湾合作委员会的替代方案是什么? (3认同)
  • 仅仅因为 _dupenv_s 返回 0 并不意味着该值存在。您仍然需要检查 buf == NULL 以验证它是否存在。 (2认同)