2012-11-08 123 views
0

我试图遍历每个包含timeval结构的几个结构。我希望能够抓住第一个日期并将其存储在START_DATE全局变量中。我也想保存迭代的最后一个结构的日期。我通过在END_DATE char *中保存每一次迭代的时间来做到这一点。C获取循环中的开始时间和结束时间

我遇到的问题是即使START_DATE = asctime(localtime(& curSec));只被调用一次,START_TIME正在覆盖循环的每次迭代。

这里有一个问题,任何人都可以指出吗?没有双关语意。

//Global 
char *START_DATE = NULL; 
char *END_DATE = NULL; 

int main(int argc, char *argv[]) { 

//start while loop that gets a new header struct each loop 
time_t curSec = (time_t)header->ts.tv_sec; 
    if (!START_DATE) 
     START_DATE = asctime(localtime(&curSec)); 
    END_DATE = asctime(localtime(&curSec)); 
//end while loop 

printf("Start Date: %s", START_DATE); 
printf("End Date: %s", END_DATE); 
} 

回答

2

参见asctime reference

保持这个字符串静态分配和由ctime但asctime两种功能共享的阵列。每次调用这些函数中的任何一个时,此数组的内容都将被覆盖。

asctime总是返回相同的指针,这是其持有,所以START_DATEEND_DATE总是指向同一件事的内部缓冲器。

因此,每次调用函数时,START_DATEEND_DATE指向的字符串都会更改。

要获得字符串的副本,它不会被覆盖,你将需要分配您自己的缓冲区,并复制过来使用strncpy(或strcpy,如果你决定使用malloc(strlen(START_DATE) + 1),而不是char buf[1024]或类似)。

相关问题