2012-06-24 10 views
7

स्वरूपित वापसी करने के लिए मैं कुछ इस तरह करना चाहते हैं:ग समारोह स्ट्रिंग

writeLog(printf("This is the error: %s", error)); 

तो मैं एक समारोह जो एक स्वरूपित स्ट्रिंग रिटर्न के लिए देख रहा हूँ।

+8

'देखें snprintf'। –

+1

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ sprintf – Mark

+0

क्षमा करें, लेकिन ऐसा लगता है जैसे स्नप्रिंटफ स्प्रिंटफ के समान ही करता है, स्वरूपित स्ट्रिंग को एक चर में डाल देता है। जो मैं खोज रहा हूं वह एक ऐसा फ़ंक्शन है जो सीधे स्वरूपित स्ट्रिंग को वापस करता है। – Zulakis

उत्तर

5

कोई भी कार्य मौजूद नहीं है, थोड़ा अलग दृष्टिकोण पर विचार करें: writeLog printf-like, यानी एक स्ट्रिंग और तर्कों की एक चर संख्या लें। फिर, इसे आंतरिक रूप से संदेश स्वरूपित करें। यह स्मृति प्रबंधन समस्या को हल करेगा, और writeLog के मौजूदा उपयोगों को तोड़ नहीं देगा।

आप यह संभव लगता है, तो आप इन पंक्तियों के साथ कुछ का उपयोग कर सकते हैं:

void writeLog(const char* format, ...) 
{ 
    char  msg[100]; 
    va_list args; 

    va_start(args, format); 
    vsnprintf(msg, sizeof(msg), format, args); // do check return value 
    va_end(args); 

    // write msg to the log 
} 
+1

इस अच्छे दृष्टिकोण के लिए धन्यवाद। ठीक वही जो मेरे द्वारा खोजा जा रहा था। – Zulakis

5

मानक पुस्तकालय में ऐसा कोई फ़ंक्शन नहीं है और मानक लाइब्रेरी में कभी भी कोई नहीं होगा। यदि आप एक चाहते हैं, तो आप इसे स्वयं लिख सकते हैं। यहां आपको इसके बारे में सोचना चाहिए: लौटाई गई स्ट्रिंग के लिए स्टोरेज आवंटित करने वाला कौन है, और कौन इसे मुक्त करने जा रहा है? क्या यह थ्रेड-सुरक्षित होगा या नहीं? क्या लौटाई गई स्ट्रिंग की अधिकतम लंबाई पर सीमा होगी या नहीं?

संबंधित मुद्दे