C ++ vsnprintf () - C ++ Standard Library

C ++ में vsnprintf () फ़ंक्शन का उपयोग स्ट्रिंग स्ट्रिंग को एक स्वरूपित स्ट्रिंग लिखने के लिए किया जाता है।

Vsprintf () के विपरीत, बफर को लिखे जा सकने वाले वर्णों की अधिकतम संख्या में निर्दिष्ट की गई है vsnprintf()

vsnprintf () प्रोटोटाइप

 int vsnprintf (char * बफर, size_t buf_size, const char * format, va_list vlist);

vsnprintf()समारोह स्ट्रिंग एक चरित्र स्ट्रिंग बफर करने के लिए प्रारूप द्वारा की ओर इशारा किया लिखता है। लिखे जा सकने वाले वर्णों की अधिकतम संख्या buf_size है। वर्ण लिखे जाने के बाद, एक समाप्ति शून्य वर्ण जोड़ा जाता है। यदि buf_size शून्य के बराबर है, तो कुछ भी नहीं लिखा गया है और बफर एक शून्य सूचक हो सकता है।

स्ट्रिंग प्रारूप में% के साथ शुरू होने वाले प्रारूप विनिर्देशक शामिल हो सकते हैं जो कि सूची सूची के रूप में पारित होने वाले चर के मूल्यों द्वारा प्रतिस्थापित किए जाते हैं।

इसे हेडर फ़ाइल में परिभाषित किया गया है।

vsnprintf () Parameters

  • बफर: परिणाम लिखने के लिए एक चरित्र स्ट्रिंग को इंगित करें।
  • buf_size: लिखने के लिए अधिकतम वर्ण।
  • प्रारूप: एक शून्य समाप्त स्ट्रिंग को इंगित करता है जो फ़ाइल स्ट्रीम में लिखा जाता है। इसमें% के साथ शुरू होने वाले वैकल्पिक प्रारूप विनिर्देशक के साथ वर्ण शामिल हैं।

    प्रारूप निर्दिष्टकर्ता संबंधित स्ट्रिंग के मानों द्वारा प्रतिस्थापित किए जाते हैं जो प्रारूप स्ट्रिंग का अनुसरण करते हैं।

    प्रारूप विनिर्देशक के निम्नलिखित भाग होते हैं:

    • एक अग्रणी% चिन्ह
    • झंडे: वैकल्पिक एक या अधिक झंडे जो रूपांतरण व्यवहार को संशोधित करते हैं।
      • - - वाम क्षेत्र के भीतर परिणाम को सही ठहराते हैं। डिफ़ॉल्ट रूप से यह सही है।
      • +: परिणाम का संकेत मूल्य की शुरुआत से जुड़ा है, यहां तक ​​कि सकारात्मक परिणामों के लिए भी।
      • अंतरिक्ष: यदि कोई संकेत नहीं है, तो परिणाम की शुरुआत के लिए एक स्थान जुड़ा हुआ है।
      • #: रूपांतरण का एक वैकल्पिक रूप प्रदर्शन किया जाता है।
      • 0: इसका उपयोग पूर्णांक और फ्लोटिंग पॉइंट संख्या के लिए किया जाता है। अंतरिक्ष के बजाय संख्याओं को पैड करने के लिए अग्रणी शून्य का उपयोग किया जाता है।
    • चौड़ाई: न्यूनतम चौड़ाई क्षेत्र को निर्दिष्ट करने के लिए उपयोग किया गया एक वैकल्पिक * या पूर्णांक मान।
    • परिशुद्धता: एक वैकल्पिक क्षेत्र जिसमें एक है। परिशुद्धता को निर्दिष्ट करने के लिए * या पूर्णांक या कुछ भी नहीं है।
    • लंबाई: एक वैकल्पिक लंबाई संशोधक जो तर्क के आकार को निर्दिष्ट करता है।
    • विनिर्देशक: रूपांतरण प्रारूप निर्दिष्ट करता है। उपलब्ध प्रारूप विनिर्देशक इस प्रकार हैं:
      प्रारूप विनिर्देशक विवरण
      % प्रिंट%
      सी एकल चरित्र लिखता है
      एस एक चरित्र स्ट्रिंग लिखता है
      d या i दशमलव प्रतिनिधित्व के लिए एक हस्ताक्षरित पूर्णांक बदलता है
      एक अहस्ताक्षरित पूर्णांक को अष्टक प्रतिनिधित्व में परिवर्तित करता है
      एक्स या एक्स एक अहस्ताक्षरित पूर्णांक को हेक्साडेसिमल प्रतिनिधित्व में परिवर्तित करता है
      यू एक अहस्ताक्षरित पूर्णांक को दशमलव प्रतिनिधित्व में परिवर्तित करता है
      च या च दशमलव प्रतिनिधित्व के लिए फ़्लोटिंग-पॉइंट संख्या को कनवर्ट करता है
      ई या ई दशमलव प्रतिपादक अंकन के लिए फ्लोटिंग-पॉइंट संख्या को परिवर्तित करता है
      ए या ए हेक्साडेसिमल एक्सपोनेंट के लिए फ्लोटिंग-पॉइंट नंबर को परिवर्तित करता है
      जी या जी फ़्लोटिंग-पॉइंट नंबर को या तो दशमलव या दशमलव घातांक संकेतन में परिवर्तित करता है
      एन इस कॉल द्वारा फ़ंक्शन में अब तक लिखे गए वर्णों की संख्या लौटाता है। परिणाम तर्क द्वारा इंगित मूल्य को लिखा जाता है
      पी एक सूचक को परिभाषित करते हुए एक कार्यान्वयन परिभाषित वर्ण अनुक्रम लिखता है।

      तो प्रारूप विनिर्देशक का सामान्य प्रारूप है: %(flags)(width)(.precision)(length)specifier

  • सूची: लिखने के लिए डेटा युक्त तर्कों की एक सूची।

vsnprintf () Return value

  • सफल होने पर, vsnprintf()फ़ंक्शन लिखित वर्णों की संख्या लौटाता है।
  • असफल होने पर यह एक नकारात्मक मूल्य देता है।
  • जब स्वरूपित स्ट्रिंग की लंबाई buf_size से अधिक होती है, तो इसे छोटा करने की आवश्यकता होती है। ऐसे मामलों में, vsnprintf()फ़ंक्शन कुल अक्षरों की कुल संख्या को समाप्त कर देता है, जो कि शून्य वर्ण को समाप्त कर देता है, अगर buf_size सीमा नहीं लगाई गई होती।

उदाहरण: कैसे vsnprintf () फ़ंक्शन काम करता है

 #include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )

जब आप प्रोग्राम चलाते हैं, तो आउटपुट होगा:

 C ++ को Bjarne द्वारा बनाया गया था 

दिलचस्प लेख...