c++ - vsnprintf and gcc -


मेरे पास निम्न कथन है:

  vsnprintf (लक्ष्य, आकार - 1, "% Ls_% ls ", str16_1, str16_2);  

यह जीसीसी पर क्यों असफल है?

मैंने इसे इस तरह विंडोज में इस्तेमाल किया:

  vsnprintf (लक्ष्य, आकार - 1 , "% S_% S", str16_1, str16_2);  

और यह अपेक्षा के अनुरूप काम कर रहा है जीसीसी प्रलेखन पर मैंने पाया कि% S समानार्थक% ls है, लेकिन मुझे इसका उपयोग नहीं करना चाहिए। मैंने% S के साथ भी प्रयास किया, लेकिन काम नहीं कर रहा है मैं इसे चर तर्क सूची के साथ एक समारोह में उपयोग करते हैं। क्या यह काम करना संभव नहीं है क्योंकि मैं प्रारूप वैरिएबल को बदलता हूँ जो मैं va_start से पास करता हूं? मुझे% S खोजना चाहिए और इसे% ls में प्रारूप चर में बदलना होगा।

फ़ंक्शन कुछ ऐसा है:

  शून्य f (const char * format, ...) {Char * new_format =% s के साथ% s के साथ बदलकर% ls; Va_list आर्गेंट; Va_start (आर्ग्स, प्रारूप); Vsnprintf (str, आकार -1, नया_आकार, आर्गेंट); }  

मैंने चेक किया और नयाफ़ॉर्मेट सही है।

धन्यवाद!

snprintf का उपयोग करने का प्रयास करें, इसका कारण vsnprintf है। vsnprintf प्रकार का एक तर्क लेता है va_list , एक शाब्दिक variadic तर्क सूची नहीं। उदाहरण के लिए:

  va_list एपी; Va_start (एपी, फर्स्ट_र्ग_इन_थिस_फंक्शन); Vsnprintf (buf, आकार, format_str, एपी); Va_end (एपी);  

जबकि sprintf के साथ:

  snprintf (buf, आकार, format_str, x, y);  

का प्रयोग करें v * printf जब ...

  1. प्रिंटफ़ शैली कार्यों के आसपास रैपर बनाना
  2. वैरायडिक मैक्रोज़ एक विकल्प नहीं हैं

नहीं तो बस * printf

का उपयोग करें

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -