2016-11-27 15 views
9

ben burada zamanın dizisine sahipC++ struct tm & time_t

cl sadi[10]; 

Ama mesela ben 21:58 de sadi[5] var ve ben 21:59 bir sadi[6] var . Ardından tekrar kontrol ediyorum. Tüm sadi[].ct->tm_min, 59. Bununla ilgili problem nedir? Yakaladığınız anı tutamaz mı, her zaman güncellenir mi? Eğer öyleyse, zaman anı nasıl yakalayabilirim ve bu şekilde güncellenmez.

+0

Bu hatta geçerli C++ mı? Böyle bir yapının üyelerini ne zaman başlatmak mümkün oldu? –

+3

@ AndonM.Coleman C++ 11'den beri. Sınıf içi üye başlatmanız olabilir. – vsoftco

+0

cevabı beğenme, bu benim hatamdı, bu durumda işaretçi ile bir üye başlatmamalıyım – VirusPTIT

cevap

15

Bu hat:

struct tm* ct = localtime(&t); 

sorun işaretçilocaltime(&t) bu döner bir statik iç tamponu olmasıdır. Bu nedenle, her çağrıldığında tam olarak aynı işaretçi değerini (adresi) döndürür. Bu, tüm dizi öğelerinizin aynı struct tm nesnesine işaretçileri olduğu anlamına gelir. Ben struct tm ct; beyan (bir işaretçi) ve dereferenced değeri ile başlatmak Şimdi

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

:

bir çözüm verilerin bir kopyası Eğer localtime diyoruz her zaman yapmaktır işaretçi *localtime(&t) döndürdü.

İlgili konular