如何获取当前时间在c

ve7v8dk2  于 2023-01-12  发布在  其他
关注(0)|答案(1)|浏览(77)
void takeTime(struct tm * timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    timeNow = localtime(&timeInSec);    
    return;
}

int main() 
{
    struct tm* timeNow;
    takeTime(timeNow);
    printf("%s\n", asctime(timeNow));
    return 0;
}

尝试执行代码,但得到分段错误,有人能解释为什么。我是新的编程!

83qze16e

83qze16e1#

函数localtime返回指向静态分配结构的指针。
问题中的代码修改了指针timeNowtakeTime中的本地副本,但该值未返回给调用方。
如果你想把指针传递给调用者,你需要通过使用另一层间接引用来模拟引用,也就是说,一个指针指向一个指针。

#include <stdio.h>
#include <time.h>

void takeTime(struct tm ** timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    *timeNow = localtime(&timeInSec);    
    // This return at the end of a void function can be removed
    // return;
}

int main(void) 
{
    struct tm* timeNow;
    takeTime(&timeNow);
    printf("%s\n", asctime(timeNow));
    return 0;
}

或者你想得到这个结构的一个副本,然后你需要一个结构变量在main中,并且必须传递它的地址。

#include <stdio.h>
#include <time.h>

void takeTime(struct tm * timeNow)
{
    time_t timeInSec;
    time(&timeInSec);

    *timeNow = *localtime(&timeInSec);    
    // This return at the end of a void function can be removed
    // return;
}

int main(void) 
{
    struct tm timeNow;
    takeTime(&timeNow);
    printf("%s\n", asctime(&timeNow));
    return 0;
}

或者你可以把指针

#include <stdio.h>
#include <time.h>

struct tm * takeTime(void)
{
    time_t timeInSec;
    time(&timeInSec);

    return localtime(&timeInSec);    
}

int main() 
{
    struct tm* timeNow;
    timeNow = takeTime();
    printf("%s\n", asctime(timeNow));
    return 0;
}

返回结构的另一个变体和更详细的解释在Farhod Nematov的answer中显示,不幸的是它已经被删除了。

相关问题