क्या किसी को पता है कि सी मानक पुस्तकालय में snwprintf
फ़ंक्शन क्यों नहीं है?सी में snwprintf फ़ंक्शन क्यों नहीं है?
मुझे swprintf
के बारे में पता है, लेकिन इसमें wchar_t
संस्करण snprintf
के समान अर्थशास्त्र नहीं हैं। जहाँ तक मेरा बता सकते हैं, वहाँ का उपयोग कर [v]swprintf
एक snwprintf
समारोह को लागू करने के लिए कोई आसान तरीका है:
snprintf
के विपरीत, swprintf
आवश्यक बफर आकार वापस नहीं करता है; यदि आपूर्ति बफर अपर्याप्त है, तो यह केवल -1 लौटाता है। यह एन्कोडिंग त्रुटियों के कारण विफलता से अलग नहीं है, इसलिए मैं प्रगतिशील बड़े बफर के साथ पुनः प्रयास नहीं कर सकता हूं कि यह अंततः सफल होगा।
मुझे लगता है कि मैं बफर का अंतिम तत्व गैर-एनयूएल होने के लिए सेट कर सकता हूं, swprintf
पर कॉल करें, और मान लें कि यह तत्व तब हुआ जब वह तत्व एनयूएल है। हालांकि, क्या यह काम करने की गारंटी है? swprintf
विफल होने पर मानक निर्दिष्ट नहीं करता है कि बफर किस स्थिति में होना चाहिए। (इसके विपरीत, snprintf
वर्णन करता है कि कौन से वर्ण लिखे गए हैं और जिन्हें त्याग दिया गया है।)
मुझे लगता है कि आप सही हैं कि आप 'swprintf' विफल होने पर बफर की सामग्री के बारे में कुछ भी नहीं मान सकते हैं। क्या आप 'errno' का उपयोग कर सकते हैं? मुझे पता है कि यह POSIX पर काम करेगा लेकिन सी को एन्कोडिंग त्रुटियों के लिए 'EILSEQ' की आवश्यकता नहीं हो सकती है ...? –
@ आर ..: धन्यवाद। 'errno' एक दिलचस्प विचार है। मुझे लगता है कि अगर मैं एक पोर्टेबल समाधान चाहता हूं, हालांकि, मुझे फ्रीबीएसडी से वास्तविक 'बनामप्रिंटफ' कार्यान्वयन को संशोधित करना पड़ सकता है। = ( – jamesdlin
ध्यान रखें, printf-family फ़ंक्शन को पुन: कार्यान्वित करना शायद एक बुरा विचार है, क्योंकि आप गारंटी नहीं दे सकते कि आप सभी लोकेल-विशिष्ट कार्यक्षमता को डुप्लिकेट करते हैं। –