localtime()和gmtime()似乎弄乱了我的输入流C ++ / C.

时间:2012-02-16 05:55:59

标签: c++ c unix-timestamp localtime

我在从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(&amp; rawtime))但是我尝试将它们分成几个不同的语句,但无济于事。有没有人知道localtime()或gmtime()的有用替代品?或碰巧知道这个特定问题的解决方案?谢谢。

1 个答案:

答案 0 :(得分:1)

无论您遇到什么问题,都与您使用时间功能的方式无关。以下程序运行正常:

#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的含义。如果你的意思是你神秘地输入的行似乎添加了字符,那几乎肯定是一个不同的问题,这恰好会被函数调用加剧。

我首先要寻找(作为例子)可能溢出的缓冲区或不传输空终止符的代码逻辑。