2016-11-27 9 views
9

मैं समय की एक सरणी यहाँसी ++ struct टीएम और टाइम_टी

cl sadi[10]; 

लेकिन उदाहरण के लिए मैं 21:58 पर sadi[5] मिला, और जब मैं 21:59 पर एक sadi[6] मिला । फिर मैं फिर से जांचता हूं कि मेरे सभी sadi[].ct->tm_min59 हैं। उसमें क्या समस्या है? क्या यह उस पल को पकड़ नहीं सकता है जिसे आप इसे कैप्चर करते हैं, क्या यह हमेशा अपडेट होगा? यदि हां, तो मैं समय के पल कैप्चर कैसे कर सकता हूं और यह इस तरह अपडेट नहीं होता है।

+0

क्या यह वैध सी ++ भी है? इस तरह की संरचना के सदस्यों को शुरू करना कब संभव हो गया? –

+3

@ एंडोनएम। कोलेमैन सी ++ 11 के बाद से। आप कक्षा के सदस्य प्रारंभिक हो सकते हैं। – vsoftco

+0

उत्तर की तरह, यह मेरी गलती थी, मुझे इस मामले में सूचक के साथ एक सदस्य को प्रारंभ नहीं करना चाहिए, – VirusPTIT

उत्तर

15

यह पंक्ति:

struct tm* ct = localtime(&t); 

समस्या यह है कि सूचक कि localtime(&t) रिटर्न एक स्थिर आंतरिक बफर है। तो यह हर बार कहलाए जाने पर बिल्कुल वही सूचक मूल्य (पता) देता है। इसका मतलब है कि आपके सभी सरणी तत्वों में पॉइंटर्स समान struct tm ऑब्जेक्ट होते हैं। मैं struct tm ct; घोषित (एक सूचक नहीं है) और के dereferenced मूल्य के साथ प्रारंभ तो अब

struct cl { 
    unsigned char* buffer; 
    time_t t = time(0); 
    struct tm ct = *localtime(&t); 
}; 

:

एक समाधान एक प्रतिलिपि डेटा की हर बार जब आप localtime फोन बनाने के लिए है वापस सूचक *localtime(&t)

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