【问题标题】:What is time(NULL) in C?C中的时间(NULL)是什么?
【发布时间】:2011-11-24 21:39:40
【问题描述】:

我学习了一些基本的C函数,并在一些手册中遇到了time(NULL)

这到底是什么意思?

【问题讨论】:

    标签: c time


    【解决方案1】:

    time(NULL) 的调用返回当前日历时间(自 1970 年 1 月 1 日以来的秒数)。有关详细信息,请参阅this reference。通常,如果您传入一个指向time_t variable 的指针,该指针变量将指向当前时间。

    【讨论】:

    • +1。同样对于time_t 类型的变量timertime(&timer); 等价于timer = time(NULL);
    【解决方案2】:

    您可以传入一个指向time_t 对象的指针,time 将用当前时间填充该对象(返回值与您指向的相同)。如果你传入NULL,它只是忽略它,只返回一个新的time_t 对象,表示当前时间。

    【讨论】:

      【解决方案3】:

      time 函数返回当前时间(作为 time_t 值),以秒为单位(在 Unix 系统上,自 UTC 时间 1970 年 1 月 1 日午夜开始),它接受一个参数,time_t 指针其中存储时间。将NULL 作为参数传递会导致time 将时间作为正常返回值返回,但不会将其存储在其他任何地方。

      【讨论】:

        【解决方案4】:

        您必须参考documentation for ctimetime 是一个函数,它接受一个time_t * 类型的参数(指向time_t 对象的指针)并为其分配当前时间。除了传递这个指针,你也可以传递NULL,然后使用返回的time_t值来代替。

        【讨论】:

        • 这里所指的ctime是C++头<ctime>,与C头<time.h>类似。 (问题是关于 C,而不是 C++。)还有一个名为 ctime 的函数。
        【解决方案5】:

        Time :它返回自 1970 年 1 月 1 日以来经过的时间(以秒为单位)

        【讨论】:

        【解决方案6】:

        您可以传入指向time_t 对象的指针,该对象的时间将被当前时间填满(返回值与您指向的相同)。如果你传入NULL,它就会忽略它,只返回一个新的time_t 对象,它代表当前时间。

        Nb:time(&timer); 等价于timer = time(NULL);

        【讨论】:

          【解决方案7】:
          int main (void)
          {   
              //print time in seconds from 1 Jan 1970 using c   
              float n = time(NULL);   
              printf("%.2f\n" , n);      
          }      
          

          这会打印 1481986944.00(此时)。

          【讨论】:

          • 这个答案是错误的,因为time返回time_t,存储到float时会丢失精度。
          【解决方案8】:

          [从duplicate, now-deleted question复制的答案。]

          time() 是一个非常非常古老的函数。它可以追溯到 C 语言甚至没有类型 long 的那一天。曾几何时,获得类似 32 位类型的唯一方法是使用包含两个 ints 的数组——那时 ints 是 16 位。

          所以你打电话

          int now[2];
          time(now);
          

          它将 32 位时间填充到 now[0]now[1],一次 16 位。 (这解释了为什么其他与时间相关的函数,例如 localtimectime,也倾向于通过指针接受它们的时间参数。)

          后来,dmr 完成了将long 添加到编译器,所以你可以开始说

          long now;
          time(&now);
          

          后来,有人意识到如果 time() 继续返回值而不是仅仅通过指针填充它会很有用。但是——向后兼容是一件很棒的事情——为了所有仍在执行time(&now) 的代码,time() 函数必须继续支持指针参数。这就是为什么——这就是为什么向后兼容并不总是那么美好的事情,毕竟——如果你使用返回值,你仍然必须将 NULL 作为指针传递:

          long now = time(NULL);
          

          (当然,后来我们开始多次使用time_t而不是普通的long,例如,可以将其更改为64位类型,避开y2.038k problem。)

          [附注我实际上不确定从int [2]long 的更改以及添加返回值的更改发生在不同的时间;它们可能同时发生。但请注意,当时间表示为数组时,它必须通过指针填充,它不能作为值返回,因为当然 C 函数不能返回数组。 ]

          【讨论】:

          • 2.4 Linux 内核有一个 64 位 time_t 的错误,如果你传入一个非 NULL 参数,它只会填充低 32 位而高位不变。
          猜你喜欢
          • 1970-01-01
          • 2010-09-11
          • 2012-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-12
          • 2020-05-21
          相关资源
          最近更新 更多