मैं जो हैडर तहत C11 standard से strerrorlen_s
समारोह के लिए शामिल करने के लिए MSVC 2017 खोजने की कोशिश कर रहा हूँ C11 strerrorlen_s समारोह लापता। मुझे strerror_s
के साथ प्राप्त करने के लिए त्रुटि संदेश के लिए स्थान आवंटित करने की आवश्यकता है। कोड निम्नलिखित है:MSVC 2017 के तहत
auto size = strerrorlen_s(errno) + 1;
char* errorReason = (char*)alloca(size);
strerror_s(errorReason, size, errno);
std::ostringstream oss;
oss << "Cannot open: " << fileName << " Reason: " << errorReason;
throw std::runtime_error(oss.str());
प्रलेखन में निम्नलिखित शब्द हैं:
साथ जैसा कि सभी सीमा-जाँच काम करता है, strerror_s और strerrorlen_s केवल उपलब्ध होने की अगर
__STDC_LIB_EXT1__
द्वारा परिभाषित किया गया है की गारंटी है कार्यान्वयन और यदि उपयोगकर्ताstring.h
समेत पूर्णांक स्थिर1
पर__STDC_WANT_LIB_EXT1__
परिभाषित करता है।
MSVC 2017__STDC_LIB_EXT1__
परिभाषित नहीं करता है और यह है कि string.h
सहित प्रभाव नहीं पड़ता से पहले __STDC_WANT_LIB_EXT1__
को परिभाषित करने लगता है। हालांकि strerror_s
उपलब्ध है।
- विंडोज तहत
strerrorlen_s
उपलब्ध है MSVC 2017 साथ? - क्या यह फ़ंक्शन उपलब्ध नहीं होने पर त्रुटि संदेश की लंबाई प्राप्त करने का कोई अन्य तरीका संभव है?
- , विंडोज तहत
strerror_s
धागा सुरक्षित है क्योंकि ऐसा लगता है कि लिनक्स के तहत यह अगर वहाँ धागा सुरक्षा के लिए की जरूरत नहीं है और strerror_r इस्तेमाल किया जाना चाहिए है, लेकिन यह विंडोज पर उपलब्ध नहीं है?
क्या आपके लिए 'गेटलाइन()' गायब है? – Badda
@ बड्डा नो 'गेटलाइन' उपलब्ध है। – bobeff
@Aconcagua 'RSIZE_MAX' मैक्रो का मान' 2147483647' है। त्रुटि संदेश के लिए ऐसी स्मृति आवंटित करना बेहद अनैतिक है। :) – bobeff