题:
以下程序存在问题吗?该如何修改?【中国著名杀毒软件企业J公司2008年4月面试题】
// P115_example5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <new>
#include <iostream>
class NameStr
{
private:
char *m_pName;
char *m_pData;
public:
NameStr()
{
static const char s_szDefaultName[] = "Defalut Name";
static const char s_szDefaultStr[] = "Default String";
strcpy(m_pName, s_szDefaultName);
strcpy(m_pData, s_szDefaultStr);
}
NameStr(const char *pName, const char *pData)
{
m_pName = new char[strlen(pName)];
m_pData = new char[strlen(pData)];
strcpy(m_pName, pName);
strcpy(m_pData, pData);
}
~NameStr()
{}
void print()
{
std::cout<<"Name: "<<m_pName<<std::endl;
std::cout<<"String: "<<m_pData<<std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
NameStr *pDefNss = NULL;
try
{
pDefNss = new NameStr[10];
NameStr ns("Kingsoft string", "This is for test.");
ns.print();
}
catch(...)
{
std::cout<<"Exception!"<<std::endl;
}
delete pDefNss;
return 0;
}
答案:
// P115_example5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <new>
#include <iostream>
#include "tchar.h"
class NameStr
{
private:
char *m_pName;
char *m_pData;
public:
NameStr()
{
static const char s_szDefaultName[] = "Defalut Name";
static const char s_szDefaultStr[] = "Default String";
m_pName = new char[strlen(s_szDefaultName)+1];
m_pData = new char[strlen(s_szDefaultStr)+1];
strcpy(m_pName, s_szDefaultName);
strcpy(m_pData, s_szDefaultStr);
}
NameStr(const char *pName, const char *pData)
{
m_pName = new char[strlen(pName)+1];
m_pData = new char[strlen(pData)+1];
strcpy(m_pName, pName);
strcpy(m_pData, pData);
}
~NameStr()
{
delete[] m_pName;
delete[] m_pData;
}
void print()
{
std::cout<<"Name: "<<m_pName<<std::endl;
std::cout<<"String: "<<m_pData<<std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
NameStr *pDefNss = NULL;
try
{
pDefNss = new NameStr[10];
NameStr ns("Kingsoft string", "This is for test.");
ns.print();
}
catch(...)
{
std::cout<<"Exception!"<<std::endl;
}
delete[] pDefNss;
return 0;
}