我在从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()的有用替代方法?还是碰巧知道解决此特定问题的方法?谢谢。
最佳答案
无论您遇到什么问题,它都与您使用时间函数的方式无关。以下程序可以正常运行:
#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
的含义。如果您的意思是键入的行似乎神秘地添加了字符,那几乎可以肯定是一个不同的问题,函数调用恰恰加剧了这一问题。我首先要寻找(作为示例)可能溢出的缓冲区或不传递空终止符的代码逻辑。
关于c++ - localtime()和gmtime()似乎在破坏我的输入流C++/C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9306264/