在以下程序中
int main(){
char * time;
struct tm timeptr;
t.tm_sec = 10;
t.tm_min = 10;
t.tm_hour = 6;
t.tm_mday = 25;
t.tm_mon = 2;
t.tm_year = 89;
t.tm_wday = 6;
time = asctime(&timeptr);
puts(time);
}
asctime()返回的内存到字符串的位置是什么?我的意思是它分配在堆或调用者/被调用函数的堆栈中还是在其他地方?如果它在堆中那么我需要释放它吗?如果它在asctime的堆栈中,即使函数已将控件返回给我,我也可以访问它?如果它在调用函数的堆栈中它是如何不破坏调用者堆栈的任何数据的?我理解的是它必须在用户空间中分配。
答案 0 :(得分:0)
返回的值是从静态区域计算出来的;这不是堆。 因此,对asctime的后续调用将修改先前返回的指针指向的字符串。无需释放返回的指针。
答案 1 :(得分:0)
在cppreference的asctime
文档中说:
返回值 指向包含日期和时间的文本表示的静态以空字符结尾的字符串的指针。该字符串可以在
asctime
和ctime
之间共享,并且可以在每次调用任何这些函数时被覆盖。
答案 2 :(得分:0)
asctime
返回指向字符串的指针。
可以提出两个可能的问题。
答案是:
asctime
,它是一个静态的arrray。对于其他功能,它可能是其他功能。