localtime () и gmtime (), похоже, портят мой поток ввода C ++ / C - PullRequest
1 голос
/ 16 февраля 2012

У меня проблемы с преобразованием времени эпохи 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 ()?Или случайно знаете решение этой конкретной проблемы?Спасибо.

1 Ответ

1 голос
/ 16 февраля 2012

Какой бы ни была ваша проблема, она не связана с тем, как вы используете функции времени. Следующая программа отлично работает:

#include <stdio.h>
#include <time.h>

int main (void) {
    time_t now = time(0);
    printf ("Local time is %s", asctime (localtime (&now)));
    printf ("  UTC time is %s", asctime (gmtime (&now)));
    return 0;
}

распечатка:

Local time is Thu Feb 16 14:15:51 2012
  UTC time is Thu Feb 16 06:15:51 2012

как и ожидалось.

Вам нужно более четко указать, что означает all input gets random characters appended to to. Если вы имеете в виду, что строки, которые вы вводите загадочным образом, похоже, имеют добавленные к ним символы, то это почти наверняка проблема другая , которая, как правило, усугубляется вызовами функций.

Сначала я бы искал (в качестве примера) буферы, которые могут быть переполнены, или кодировать логику, которая не передает нулевые терминаторы.

...