23

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

我在网上找不到 _dupenv_s 的示例。

文档内容如下:

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

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

4

1 回答 1

42

_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);
}

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

于 2013-04-10T04:05:32.560 回答