一个C语音自动变量分配地址问题

char *localized_time(char *filename)
{
    struct tm *tm_ptr;
    struct stat stat_block;
    char buffer[120];

    stat (filename, &stat_block);
    tm_ptr = localtime(&stat_block.st_mtime);
    strftime(buffer, sizeof(buffer),"%a %b %e %T %Y", tm_ptr);

    return buffer;

}

上面这段代码是有错误的,问题就出在函数最后一行,也就是返回buffer的那一行。buffer是一个自动分配内存的数组。是该函数的局部变量。当控制流离开声明自动变量的范围时,自动变量失效。这就意味着即使返回一个指向局部变量的指针,当函数结束时,由于改变量已经被销毁,谁也不知道这个指针指向的地址内容是什么。

       在C语言中,自动变量在堆栈中分配内存,当包含自动变量的函数或代码块退出时,他们所占用的内存便被回收,他们的内容肯定会被下一个所调用的函数覆盖。

这种问题会导致难以预料的灾难问题且难以排查。

解决办法:

1.返回一个指向字符串常量的指针

2. 使用全局声明的数组

3.使用静态数组

4.显示的分配一些内存,保存返回的值

5.要求调用者分配内存来保存函数的返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值