大家帮忙看看这个C++程序的问题出在哪里

来源:百度知道 编辑:UC知道 时间:2024/06/29 02:03:01
这段是定义的类
// CMyDate.h: interface for the CMyDate class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CMYDATE_H__9290A8F3_7B5F_4B2F_82FB_C2941FD1461A__INCLUDED_)
#define AFX_CMYDATE_H__9290A8F3_7B5F_4B2F_82FB_C2941FD1461A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CMyDate
{
public:
char * print1();
void Print();
void SetDate(int year,int month,int day);
CMyDate();
virtual ~CMyDate();
CMyDate(const CMyDate &a)
{
}
private:
int m_nYear,m_nMonth,m_nDay;
};

#endif // !defined(AFX_CMYDATE_H__9290A8F3_7B5F_4B2F_82FB_C2941FD1461A__INCLUDED_)

这段是类的实现
// CMyDate.cpp: implementation of the CMyDate class.
//
//////////////////////////////////////////////////////////////////////

#include "CMyDate.h"
#include "io

char * CMyDate::print1() 函数错误:
char r[12]; //这句分配的内存是本地变量
而函数print1返回r,这是不允许的。因为r指向的内存在print1()函数返回后将释放,你不能在main函数中使用print1()返回的指针,所以cout会输出乱码。

一个解决方法是用char*r = new char[12]来分配内存,但要注意在不需要r的时候用delete来释放这些内存。

你返回个一个局部变量数组,将该数组改成static的,那样它的生命周期就会延长至和进程同样,就不会乱码了

char * CMyDate::print1()
{
static char r[12]; ////////////////这里
char k[3];

strcat(r,"-0");
strcat(r,k); //+strcat(r,"\0");
}
else
{
strcat(r,"-");
strcat(r,k);
strcat(r,"\0");

只改一处就行了,
在print1函数里,把r[12]改成char *r=(char *)malloc(12*sizeof(char));