0

我正在尝试遍历几个结构,每个结构都包含一个 timeval 结构。我希望能够获取第一个日期并将其存储在 START_DATE 全局变量中。我还想保存最后一次迭代的结构的日期。我通过在 END_DATE char* 中节省每次迭代的时间来做到这一点。

我遇到的问题是,即使 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);
}
4

1 回答 1

2

请参阅asctime 参考

保存此字符串的数组由 ctime 和 asctime 函数静态分配和共享。每次调用这些函数中的任何一个时,都会覆盖该数组的内容。

asctime总是返回相同的指针,指向它所拥有的内部缓冲区,所以START_DATE总是END_DATE指向同一个东西。

因此,每次调用该函数时,START_DATEEND_DATE所指向的字符串都会发生变化。

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

于 2012-11-08T20:55:10.500 回答