मैं विंडोज़ को कुछ कोड पोर्ट कर रहा हूं, और माइक्रोसॉफ्ट कंपाइलर (विजुअल सी ++ 8) मुझे बता रहा है कि strerror()
असुरक्षित है।मैं स्ट्रेरर का उपयोग क्यों नहीं कर सकता?
माइक्रोसॉफ्ट से सभी सुरक्षित स्ट्रिंग सामानों में परेशान कारक को अलग करना, मैं वास्तव में देख सकता हूं कि कुछ बहिष्कृत कार्य खतरनाक हैं। लेकिन मैं समझ नहीं पा रहा हूं कि strerror()
के साथ क्या गलत हो सकता है। यह एक कोड (int
) लेता है, और उस कोड को ज्ञात नहीं होने पर संबंधित स्ट्रिंग या खाली स्ट्रिंग देता है।
खतरे कहां है?
क्या सी में कोई अच्छा विकल्प है?
क्या सी ++ में कोई अच्छा विकल्प है?
[संपादित करें]
कुछ अच्छा जवाब था करने के बाद, और अब समझ कुछ कार्यान्वयन पर्याप्त पागल वास्तव में एक आम साझा बफर करने के लिए लिखने के लिए हो सकता है कि - एक एकल धागा भीतर reentrancy के लिए असुरक्षित, कभी नहीं धागे के बीच मन! - मेरा सवाल बंद हो रहा है "मैं इसका उपयोग क्यों नहीं कर सकता, और विकल्प क्या हैं?" "क्या सी और/या सी ++ में कोई सभ्य, संक्षिप्त विकल्प हैं?"
अग्रिम
आप इसका उपयोग नहीं कर सकते क्योंकि माइक्रोसॉफ्ट का कहना है कि "आईएसओ सी मानक शापित हो जाएगा - हम आपको इसका उपयोग नहीं करने देंगे, जब तक कि आप चेतावनी के साथ चेतावनी या त्रुटि को ओवरराइड न करें"। उन्होंने memcpy() पर भी प्रतिबंध लगा दिया है - यह हास्यास्पद है क्योंकि आप इसे बताते हैं कि कितने बाइट कॉपी करने के लिए हैं और यदि आप इसके बारे में नहीं सोच सकते हैं और जानते हैं कि memcpy() को कॉल करने से पहले बाइट्स की संख्या के लिए लक्ष्य स्थान में पर्याप्त जगह है , आप सी या सी ++ में एक टीम लेखन कोड में शामिल नहीं हैं। –