2013-04-10 14 views
9

Ich benutze getenv("TEMP"), aber ich bekomme eine Warnung, dass ich _dupenv_s verwenden soll.Kann mir jemand Beispielcode von _dupenv_s geben?

Ich kann kein Beispiel für _dupenv_s im Netz finden.

Die Dokumente lesen:

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

Aber welche Puffer sind sie beziehen? Ich habe nur Varname. Wäre es nicht besser, einen Puffer zu vermeiden?

Antwort

19

_dupenv_s ist eine Microsoft-Funktion, entworfen als eine sicherere Form von getenv.

_dupenv_s reserviert den Puffer selbst; Sie müssen ihm einen Zeiger auf einen Zeiger übergeben und er setzt dies auf die Adresse des neu zugewiesenen Puffers.

Zum Beispiel

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

Beachten Sie, dass Sie für die Freigabe des zurück Puffer verantwortlich sind.

+2

Was ist die Alternative für GCC? –

+1

Nur weil _dupenv_s 0 zurückgibt, heißt das nicht, dass der Wert existiert. Sie müssen noch überprüfen, ob buf == NULL ist, um zu überprüfen, ob es existiert oder nicht. – kainjow

+0

@MichaelIV 'getenv' gefolgt von' strcpy' oder if C++, wobei 'std :: getenv' aufgerufen wird und das Ergebnis in einer' std :: string' gespeichert wird. – rubenvb

Verwandte Themen