gpt4 book ai didi

c - puzzle - 在 C 中以人类可读的形式打印时间; ctime,asctime

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:46 25 4
gpt4 key购买 nike

有一个我认为我知道正确答案的谜题,但我也有一个问题。看看:

Sample Code 
void printTime( time_t *t )
{
????
}

下面哪一个可以代替????在上面的代码中以人类可读的形式打印 t 中传递的时间?

  1. :

    char s[ 100 ];
    ctime( t, s );
    printf( "%s\n", s );
  2. :

    printf( "%s\n", ctime( t ) ); 
  3. :

    printf( "%s\n", asctime( t ) ); 
  4. :

    printf( "%s", t ); 
  5. :

    char *s = ctime( t ); 
    printf( "%s\n", s );
    free( s );

我的答案是答案 2(函数 ctime 将 time_t 指针作为输入并返回指向字符串的指针,然后可以由 printf 打印该字符串)。

答案 5 的代码在编译时也能正常工作,但是为什么我们要在之前没有分配存储空间的情况下使用 free() 呢?您认为这就是答案 5 错误的原因吗?

谢谢,普热梅克

最佳答案

  1. 这样不行,使用ctime_r相反。
  2. 有效且正确。
  3. 类型错误,您必须先转换它,例如使用 localtime .
  4. 错误的可变参数类型,应为 char* 但已给出 time_t*
  5. 不正确的 free,因为 ctime 自己管理它的缓冲区,例如使用静态的。

一般来说,这些函数中的大多数(即 asctimectimelocaltime ……)现在有两种变体:历史形式使用一些静态分配的缓冲区来保存返回值,以及一个更现代的版本,带有 _r 后缀,代表 可重入。对于后者,您必须自己提供输出缓冲区,这意味着您负责分配它。最大的优势是多个线程可以同时使用可重入版本而不用担心覆盖彼此的结果。

关于c - puzzle - 在 C 中以人类可读的形式打印时间; ctime,asctime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com