c函数调用堆栈问题

请问下面code:char*get_millitm(){structtimevaltms;chartstr[100];char*time;timerclear(&tms)... 请问下面code:
char *get_millitm()
{
struct timeval tms;
char tstr[100];
char *time;
timerclear(&tms);
gettimeofday(&tms, NULL);
strftime(tstr, 100, "%X", localtime(&tms.tv_sec));
/* tv_usec是微秒,除以1000转换为毫秒 */
sprintf(time, "%s.%d", tstr, tms.tv_usec/1000);
return time;
}
如果在另一个函数中调用它,例如:
void method(){
printf("%s\n", get_millitm());
}
这样是不是再次调用函数,有可能将time覆盖,所以应该使用下面
void get_millitm(char *time)
{
struct timeval tms;
char tstr[100];
timerclear(&tms);
gettimeofday(&tms, NULL);
strftime(tstr, 100, "%X", localtime(&tms.tv_sec));
/* tv_usec是微秒,除以1000转换为毫秒 */
sprintf(time, "%s.%d", tstr, tms.tv_usec/1000);
}
这样在其它函数中使用time变量就不会有两次调用出现问题的情况了。

可以解释下原因么?谢谢!
展开
 我来答
gift925
2009-11-18 · TA获得超过557个赞
知道小有建树答主
回答量:659
采纳率:0%
帮助的人:497万
展开全部
第一个函数返回的是字串常量的地址。当第二次调用的时候,显然可能会变。而且您这个我觉得不太安全。虽然返回的是字串常量的地址,你怎么保证该函数运行完毕,这个常量还在呢?我是很怀疑的。

后面那个time是外部变量的地址,是传进来的。而在函数体内,只是改变了外部变量的字符串。本身的地址是没有改变的。这个就没有问题了。
zy31887493
2009-11-18 · 超过19用户采纳过TA的回答
知道答主
回答量:139
采纳率:0%
帮助的人:37.1万
展开全部
char *time;只是一根指针占4byte,sprintf的第一个参数需要一段数据空间用来放格式化字符串,你的time只是一个空指针或者随机指到某个地方的指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式