【发布时间】:2013-01-01 00:43:00
【问题描述】:
下面有一个谜题,我认为我知道正确答案,但我也有一个问题。看看:
Sample Code
void printTime( time_t *t )
{
????
}
以下哪一项可以代替????在上面的代码中以人类可读的形式打印在 t 中传递的时间?
-
:
char s[ 100 ]; ctime( t, s ); printf( "%s\n", s ); -
:
printf( "%s\n", ctime( t ) ); -
:
printf( "%s\n", asctime( t ) ); -
:
printf( "%s", t ); -
:
char *s = ctime( t ); printf( "%s\n", s ); free( s );
我的答案是答案 2(函数 ctime 将 time_t 指针作为输入并返回指向字符串的指针,然后可以通过 printf 打印该字符串)。
答案 5 的代码在编译后也能正常工作,但为什么在之前没有分配存储空间的情况下我们要使用 free() 呢?你认为这就是答案 5 错误的原因吗?
谢谢你, 普热梅克
【问题讨论】:
-
存储空间已被
ctime(t)分配 -
注意:它没有被动态分配,所以
freeing是错误的。ctime使用静态缓冲区(通常所有调用都使用相同的缓冲区)。 -
这与
ctime_r不同,reentrant(即线程安全)版本,您自己为其提供缓冲区。