2013-04-10 6 views
9

मैं getenv("TEMP") का उपयोग कर रहा हूं, लेकिन मुझे _dupenv_s का उपयोग करने के लिए मुझे चेतावनी मिल रही है।क्या कोई मुझे _dupenv_s का उदाहरण कोड दे सकता है?

मुझे नेट पर _dupenv_s का उदाहरण नहीं मिल रहा है।

डॉक्स पढ़ें:

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

लेकिन क्या बफर वे बात कर रहे हैं के लिए? मेरे पास केवल वर्नाम है। बफर का उपयोग करने से बचने के लिए बेहतर नहीं होगा?

उत्तर

19

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

ध्यान दें कि आप वापस आ बफर मुक्त कराने के लिए जिम्मेदार हैं।

+2

जीसीसी के लिए विकल्प क्या है? –

+1

सिर्फ इसलिए कि _dupenv_s 0 देता है इसका मतलब यह नहीं है कि मान मौजूद है। आपको अभी भी यह जांचने की आवश्यकता है कि क्या buf == NULL यह सत्यापित करने के लिए है कि यह मौजूद है या नहीं। – kainjow

+0

@MichaelIV 'getenv' के बाद 'strcpy' या सी ++,' std :: getenv' को 'std :: string' में परिणाम संग्रहीत करते हुए कॉल किया जाता है। – rubenvb

संबंधित मुद्दे

 संबंधित मुद्दे