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

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -