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;
}
尝试执行代码,但得到分段错误,有人能解释为什么。我是新的编程!
1条答案
按热度按时间83qze16e1#
函数
localtime
返回指向静态分配结构的指针。问题中的代码修改了指针
timeNow
在takeTime
中的本地副本,但该值未返回给调用方。如果你想把指针传递给调用者,你需要通过使用另一层间接引用来模拟引用,也就是说,一个指针指向一个指针。
或者你想得到这个结构的一个副本,然后你需要一个结构变量在
main
中,并且必须传递它的地址。或者你可以把指针
返回结构的另一个变体和更详细的解释在Farhod Nematov的answer中显示,不幸的是它已经被删除了。