यह स्थिर आबंटित स्मृति का एक टुकड़ा (शायद या तो एक static
चर या localtime
अंदर परिभाषित एक वैश्विक सी क्रम पुस्तकालय में कहीं परिभाषित) के लिए सूचक देता है। आपको ऐसी स्मृति मुक्त नहीं करनी चाहिए।
स्पष्ट रूप से यह फ़ंक्शन पुनर्वित्त नहीं है (लेकिन टीएलएस का उपयोग होने पर थ्रेड-सुरक्षित हो सकता है)।
आप जब इस सूचक का उपयोग कर सावधान रहना चाहिए: कभी नहीं जवाब में (,/... इससे पहले कि आप कि सूचक का उपयोग समाप्त अन्यथा अपने सूचक द्वारा संदर्भित स्मृति की सामग्री को बदल सकता है किसी भी समारोह कॉल कि localtime
/gmtime
कह सकते हैं बनाने के localtime
पर नई कॉल के लिए) और आप time_t
के सापेक्ष मूल्य पढ़ रहे होंगे।
सामान्यतः दिनांक/समय पुस्तकालय का डिज़ाइन काफी पुराना है, इस तरह का अनुकूलन सार्थक था जब सी भाषा डिज़ाइन की गई थी, आजकल यह केवल समस्याएं देता है।
इन समस्याओं का समाधान करने के लिए इन कार्यों में से कम से कम दो अलग बेहतर संस्करण हैं: localtime_r
(SUSv2, "रैत्रांत" के लिए r
रहता है) और localtime_s
(माइक्रोसॉफ्ट, "सुरक्षित" के लिए s
रहता है)।पोर्टेबिलिटी के लिए दुखद तथ्य यह है कि ये लगभग एक ही चीज करते हैं (उन्हें पैरामीटर के रूप में पारित करने के लिए गंतव्य struct tm
की आवश्यकता होती है), लेकिन पैरामीटर के नाम और क्रम में भिन्न होती है।
स्रोत
2012-01-01 17:21:01
आप अपने कोड में टीएम स्ट्रक्चर *** को परिभाषित और आवंटित करते हैं। *** localtime() उस संरचना में अपना आउटपुट संग्रहीत करता है और उसी संरचना में एक सूचक देता है। यह अनावश्यक प्रतीत हो सकता है लेकिन कभी-कभी पॉइंटर वापस पाने के लिए यह आसान होता है, भले ही आप जानते हैं कि संरचना कहां है। –
@PeteWilson - उम, नहीं, आप नहीं करते। कृपया नीचे दिए गए उत्तरों को देखें। आप जो वर्णन करते हैं वह कॉल के '_r' संस्करण (' localtime_r() ') में एसएसवीवी 2 या एमएसवीसी –
में कॉल के' _s' संस्करण के संभावित मामले में केवल मामला है [लोकलटाइम की लौटाई गई संरचना() की आवश्यकता है मुक्त हो?] (http://stackoverflow.com/questions/6210880/does-returned-struct-of-localtime-need-to-be- मुक्त) –