c++ - 为什么memcpy(calendar, cal, sizeof(CALENDAR))这里输出是错误的啊,搞不懂了
大家讲道理
大家讲道理 2017-04-17 12:03:19
0
2
879

不知道是什么原因

#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;
}

输出是这样的

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(2)
刘奇

局部变量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);

洪涛
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; // 返回局部变量的引用 闹哪样?
}

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!