C 函数返回指向结构的指针
我已经开始在C中学习Linux编程,遇到了以下问题:C 函数返回指向结构的指针,c,pointers,struct,malloc,C,Pointers,Struct,Malloc,我已经开始在C中学习Linux编程,遇到了以下问题: time_t now; struct tm *local_time; now = time(NULL); local_time = localtime(&now); 函数localtime是Linux API的一部分,它接受指向time\u t的指针,这很好,但是为什么它返回指向tmstruct的指针呢 我的问题是tm结构在初始化后如何管理 如果localtime静态分配了结构,则不能保证在程序运行时不会覆盖该结构;如果tm结构是
time_t now;
struct tm *local_time;
now = time(NULL);
local_time = localtime(&now);
函数localtime
是Linux API的一部分,它接受指向time\u t
的指针,这很好,但是为什么它返回指向tm
struct的指针呢
我的问题是tm
结构在初始化后如何管理
如果localtime
静态分配了结构,则不能保证在程序运行时不会覆盖该结构;如果tm
结构是动态分配的,则程序员必须调用free
该结构不再需要
那么C函数返回指针的正确阶段是什么呢
谢谢 根据(为清晰起见添加了粗体和斜体):
函数的作用是:将日历时间timep转换为相对于用户指定时区表示的细分时间表示形式。该函数的作用就像调用tzset(3)一样,并将外部变量tzname设置为当前时区、协调世界时(UTC)与本地标准时间(以秒为单位)之差的时区,以及如果夏令时规则在一年中的某个时间段适用,则将日光设置为非零值返回值指向一个静态分配的结构,该结构可能会被任何日期和时间函数的后续调用覆盖。localtime\u r()函数也会这样做,但会将数据存储在用户提供的结构中。它不需要设置名称、时区和日光
粗体部分表示返回值的行为与您猜测的完全相同,后续调用可能会覆盖先前返回的结构
您需要立即缓存生成的结构或使用斜体部分中提到的函数。Kevin解释了问题所在,并且您的假设是正确的。 对于此类函数,您可以应用一个简单的修复:
time_t now;
struct tm local_time;
now = time(NULL);
local_time = *localtime(&now);
从localtime(&now)
返回时,静态分配结构的内容将复制到本地结构local\u time
编辑:还有很多话要说:
mktime
和gmtime
之间共享相同的缓冲区,因此使用这些缓冲区也可以修改结构localtime(const time*restrict timer,struct tm*restrict dst)代码>