Может ли кто-нибудь дать мне пример кода dupenv s?

Я использую getenv("TEMP"), но я получаю предупреждение, говорящее мне использовать _dupenv_s.

Я не могу найти пример _dupenv_s в сети.

документы читать:

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

но какой буфер они имеют в виду? У меня есть только varname. Не лучше ли избегать использования буфера?

1 ответов


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

обратите внимание, что вы несете ответственность за освобождение возвращенного буфера.