c - Strange behaviour of gcc in Debian -
char * stft (const char * fmt, ...) {va_list आइटम; चार * बाहर; इंट जादू = 0; // & lt; - यहां जादू? va_start (आइटम, एफएमटी); Vsprintf (बाहर, एफएमटी, आइटम); va_END (आइटम); वापसी; } जैसे प्रयोग करें:
char * str = stft ("% s-% s% s", a, b, c); यह समाधान काम कर रहा है? अगर अप्रयुक्त "जादू" चर को हटा दें - मेरे पास रिटर्न स्ट्रिंग के बाद सेगमेंटेशन फॉल्ट है I क्या गलत है?
$ gcc --version जीसीसी (डेबियन 4.4.5-8) 4.4.5
$ uname- एक लिनक्स गहरे स्टेशन (निचोड़) 2.6.32- 5-686 # 1 एसएमपी शुक्र 10 मई 08:33:48 यूटीसी 2013 i686 जीएनयू / लिनक्स
आप एक अपरिहार्य संकेतक बाहर लिखने की कोशिश कर रहे हैं यही कारण है कि आप दुर्घटना यह बुरी तरह से अपरिभाषित व्यवहार है जादू संयोग है; यह व्यवहार को बेहतर परिभाषित नहीं करता है। इसका उपयोग करना सबसे अच्छा है:
char * out = malloc (256); ... vsnprintf (बाहर, 256, एफएमटी, आइटम); ... बाहर निकलो; या ऐसा कुछ।
आप इसे सुधार सकते हैं। उदाहरण के लिए:
char * stft (const char * fmt, ...) {va_list आइटम; va_start (आइटम, एफएमटी); Int लंबाई = vsnprintf (0, 0, एफएमटी, आइटम); va_end (आइटम); चार * आउट = मॉलोक (लंबाई + 1); अगर (बाहर! = 0) {va_start (आइटम, एफएमटी); Vsnprintf (बाहर, लंबाई + 1, एफएमटी, आइटम); va_end (आइटम); } बाहर निकलना; } सुनिश्चित करें कि आप कॉलिंग कोड में आवंटित स्मृति को मुक्त कर दें।
Comments
Post a Comment