У меня проблемы с преобразованием времени эпохи unix в массив символов. Я знаю, как это сделать, и преобразование происходит правильно, но после вызова gmtime() или localtime() ко всем входным данным добавляются случайные символы. Я зафиксировал проблему, и ТОЛЬКО строки, вызывающие localtime() или gmtime(), вызывают эту проблему (серьезно... Они у меня есть, и проблема возникает, я их комментирую, переделываю, и проблема больше не возникает). Вот функция, в которой вызывается функция:
void ls(){
int clusterSize = bootRecord[0];
int root = bootRecord[2];
for (int i = 0; i < bootRecord[0] / 128 ; ++i){
fseek(fp, clusterSize * root + 128 * i, SEEK_SET);
if(directoryTable[i].name[0] != 0x00){
time_t rawtime = (time_t)directoryTable[i].creation;
struct tm * curDate;
curDate = localtime(&rawtime);
printf("%s %d %s", directoryTable[i].name, directoryTable[i].size,
asctime(gmtime(&rawtime)));
}
}
}
Прямо сейчас у меня есть asctime(gmtime(&rawtime)) но я пытался разделить их на несколько разных операторов, но безрезультатно. Кто-нибудь знает полезную альтернативу localtime() или gmtime()? Или случайно не знаете решение именно этой проблемы? Спасибо.
gmtime_r()
и/илиlocaltime_r()
? Эти две функции работают сstruct tm
, выделенными вызывающей стороной, и поэтому в целом более безопасны. - person Pavel Zhuravlev   schedule 16.02.2012