【问题标题】:C Get Start Time and End Time in LoopC 在循环中获取开始时间和结束时间
【发布时间】:2012-11-08 20:52:02
【问题描述】:

我正在尝试遍历几个结构,每个结构都包含一个 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);
}

【问题讨论】:

    标签: c pointers time


    【解决方案1】:

    见asctime reference:

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

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

    所以每次调用函数时,START_DATE 和 END_DATE 指向的字符串都会改变。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2020-02-22
      • 1970-01-01
      相关资源
      最近更新 更多