2012-11-08 172 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]或類似)。

相關問題