क्या "_" का अर्थ है? माइक्रोसॉफ्ट शुरुआत में इस चिह्न को क्यों जोड़ता है?एमएसवीसी ++ में क्यों हमारे पास _snprintf है जबकि अन्य कंपाइलर्स snprintf
उत्तर
_
से शुरू होने वाले वैश्विक नामस्थान में पहचानकर्ता कार्यान्वयन के लिए आरक्षित हैं। _snprintf
सिर्फ एक समारोह है कि कार्यान्वयन (विजुअल स्टूडियो) प्रदान किया गया है। इसके लिए तर्क के रूप में, विजुअल स्टूडियो सी 8 9 लागू करता है, और snprintf
बाद के सी 99 मानक का हिस्सा है।
कि इसके अलावा, दोनों कार्यों का अर्थ विज्ञान वापसी प्रकार है, जो snprintf
में हमेशा से वर्णों की संख्या कि स्वरूपित स्ट्रिंग लेता है (कि क्या वहाँ बफर में पर्याप्त स्थान था या नहीं, जबकि _snprintf
वापस आ जाएगी है में अलग हैं । एक ऋणात्मक संख्या अगर वहाँ बफर में पर्याप्त स्थान नहीं है
है यही कारण है, एक बफर सिर्फ उत्पादन के लिए काफी बड़ी आप कर सकते हैं आवंटित करने के लिए:
int size = snprintf(0, 0, "%s %d\n", str, i);
char * buffer = malloc(size+1);
snprintf(buffer, size+1, "%s %d\n", str, i);
आप ऐसा नहीं कर सकते कि _snprintf
के रूप में के साथ पर लाइफ जानकारी जो फ़ंक्शन उत्पन्न करती है वह यह है कि वर्तमान आकार पर्याप्त नहीं है।
snprintf()
उस समय मानक का हिस्सा नहीं था जब माइक्रोसॉफ्ट के सी रनटाइम ने इसका समर्थन करना शुरू किया था।
चूंकि फ़ंक्शन प्रोटोटाइप मानकीकृत नहीं किया गया था, और डेवलपर snprintf
(मानक बाद में एक अलग प्रोटोटाइप निर्दिष्ट करते हैं) का उपयोग नहीं करना चाहते थे, तो उन्होंने फ़ंक्शन को माइक्रोसॉफ्ट के रूप में इंगित करने के लिए एक अग्रणी अंडरस्कोर जोड़ने का विकल्प चुना मानक के लिए विस्तार।
ऊपर करने के लिए जोड़ा जा रहा है दृश्य स्टूडियो 2015
के बाद से
वहाँ उचित C99 snprintf()
और vsnprintf()
उपलब्ध हैं, और वे भी अच्छी तरह से जाना असुरक्षित समारोह प्रतिवाद चेतावनी ट्रिगर नहीं करते।
_snprintf_s()
या _vsnprintf_s()
, प्रदान किए जाने पर, गैर-सी 99 व्यवहार के साथ, एमएसवीसी-विशिष्ट कार्यों के "सुरक्षित रूप" हैं।
अपर्याप्त रूप से बड़े बफर (डेविड के उत्तर में वर्णित) के मामले में एक अलग वापसी मूल्य के अलावा, _sn...
समूह के कार्य मानक snprintf
से दूसरे महत्वपूर्ण संदर्भ में भिन्न होते हैं। यदि लक्ष्य बफर बहुत छोटा बहुत छोटा है, _sn...
फ़ंक्शंस इस स्थिति को "सफलता" मानते हैं।
और अधिक विस्तार में, यदि लक्ष्य बफर काफी लंबे समय लेकिन बिना समाप्त शून्य चरित्र पूरे परिणामी अनुक्रम स्टोर करने के लिए है, _sn...
कार्यों परिणाम काटना नहीं है, लक्ष्य बफर में समाप्त शून्य नहीं लिखते और परिणामस्वरूप बफर के आकार को वापस कर दें। इसलिए, सामान्य स्थिति में परिणाम शून्य-समाप्त होने की गारंटी नहीं है।
इसी स्थिति में, snprintf
परिणामी अनुक्रम के अंतिम चरित्र को त्याग देगा और इसके स्थान पर शून्य टर्मिनेटर लिख देगा। snprintf
का परिणाम हमेशा शून्य-समाप्त होता है।
- 1. हमारे पास जावास्क्रिप्ट में बंद क्यों है?
- 2. पाइथन के पास "अन्य के लिए" और "जबकि-अन्य" में "अन्य" क्यों है?
- 3. हमारे पास C12+ में <cstdfloat> क्यों नहीं है?
- 4. क्या हमारे पास सी ++ में बंद है?
- 5. क्या हमारे पास बुलेटन
- 6. क्या हमारे पास IENumerable
- 7. क्या हमारे पास edittext
- 8. हमारे पास दोनों जंजीर सरणी और बहुआयामी सरणी क्यों है?
- 9. रेजर/सीएसएचटीएमएल - हमारे पास क्या लाभ है?
- 10. हमारे पास पाइथन में कॉल करने योग्य ऑब्जेक्ट्स क्यों हैं?
- 11. जावा में हमारे पास निकास कोड क्यों हैं?
- 12. एमएसवीसी ++
- 13. एमएसवीसी
- 14. क्या हमारे पास पर्ल में एक ऑटोचॉम्प है?
- 15. क्या हमारे पास एक शर्त में असाइनमेंट हो सकता है?
- 16. गैर-एमएसवीसी कंपाइलर
- 17. एमएसवीसी
- 18. तुलना तार, जबकि अन्य नहीं
- 19. किस कारण से हमारे पास low_case_with_underscores नामकरण सम्मेलन है?
- 20. कंपाइलर्स
- 21. एमएसवीसी ++
- 22. एमएसवीसी
- 23. एमएसवीसी
- 24. क्या हमारे पास आभासी स्थैतिक विधि हो सकती है? (C++)
- 25. एमएसवीसी
- 26. एमएसवीसी
- 27. यदि प्रोफाइलर उत्तर नहीं है, तो हमारे पास अन्य विकल्प क्या हैं?
- 28. सी ++ कंपाइलर्स वास्तव में संदर्भ पैरामीटर कैसे पास करते हैं?
- 29. strftime प्रदर्शन बनाम snprintf
- 30. snprintf और sprintf स्पष्टीकरण