为什么memcpy(calendar, cal, sizeof(CALENDAR))这里输出是错误的啊,搞不懂了-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

为什么memcpy(calendar, cal, sizeof(CALENDAR))这里输出是错误的啊,搞不懂了

不知道是什么原因

#include<iostream>
using namespace std;

typedef struct
{
    int year;
    int month;
    int date;
    int hour;
    int minute;
    int second;
    int millisecond;
}CALENDAR;
CALENDAR *getCalendar()
{
    CALENDAR cal ;
    cal.year = 2015;
    cal.month = 8;
    cal.date = 15;
    cal.hour = 14;
    cal.minute = 34;
    cal.second = 23;
    cal.millisecond = 123;
    return &cal;
}

int main()
{
    CALENDAR calendar;
    CALENDAR* cal;
    cal = getCalendar();
    memcpy(&calendar, cal, sizeof(CALENDAR));
    cout << calendar.year << " "
        << calendar.month << " "
        << calendar.date << " "
        << calendar.hour << " "
        << calendar.minute << " "
        << calendar.second << " "
        << calendar.millisecond << " "
        << sizeof(CALENDAR) << endl;
}

输出是这样的

展开
收起
a123456678 2016-06-08 16:03:53 1719 0
1 条回答
写回答
取消 提交回答
  • 西秦说云
    码农|Coder| Pythonista

    局部变量CALENDAR cal ;是在栈上定义的,在退出函数作用域时就内存就释放掉了,后续的代码将覆盖这块内存区域,输出就是未确定的值;

    可以改用直接返回对象而非指针

    CALENDAR getCalendar()
    {
    CALENDAR cal ;
    cal.year = 2015;
    cal.month = 8;
    cal.date = 15;
    cal.hour = 14;
    cal.minute = 34;
    cal.second = 23;
    cal.millisecond = 123;
    return cal;
    }

    也可以改用引用(或指针)传入返回;

    void getCalendar(CALENDAR& cal)
    {
    cal.year = 2015;
    cal.month = 8;
    cal.date = 15;
    cal.hour = 14;
    cal.minute = 34;
    cal.second = 23;
    cal.millisecond = 123;
    }
    CALENDAR calendar;
    getCalendar(calendar);
    2019-07-17 19:32:11
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载