两道面试题 请帮帮忙

water_tian 2007-07-16 02:01:12
1. 在VC中用写一个基于console(控制台)的小程序。

a) 用C++实现一个CDog类。

b) CDog有一个AddAge()函数,调用时,年龄+1,当Dog到了10岁时,就会dead.

c) CDog有一个Bark()函数(吠叫),调用时,显示"Wang wang ....."

d) 未说明之处,自由发挥,注意逻辑的合理性。

这个如何写啊 我还是菜鸟 。。。

二、代码查错
找出下面几段代码的错误之处

char szName[16];
memcpy(szName,"bqqadmin",16); 、
----------------------------
char szName[16];
strcpy(szName,"bqqadmin");
if( szName=="bqqadmin" )
{
printf("Ok");
}
-------------------------------
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);
}
---------------------------------
HRESULT Invoke(BOOL b)
{
HRESULT hr;
if( b )
{
hr = S_OK;
}
return hr;
}

看不出哪有里错误 。。。
...全文
379 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjdiablo 2007-07-17
  • 打赏
  • 举报
回复
我怎么没碰过这么简单的面试题啊,LZ太幸运了
king_wp 2007-07-17
  • 打赏
  • 举报
回复
char szName[16];
memcpy(szName,"bqqadmin",16); 这个就不对,
应该是memcpy(szName,"bqqadmin",strlen,"bqqadmin")); 长度超过了肯定异常啊

if( szName=="bqqadmin" ) // 用strcmp

strncpy(szName,lpszName,16);//先不说有没有意义,首先szName应该初始化,再有(char*)lpszName转换是应该做的,再有,应该判断下lpszName长度,看够不够16,不够16会异常,谁给你出的题啊太没素质了,呵呵。。

if( b )
{
hr = S_OK;
}
return hr; ////加else或初始化hr

dabang_007 2007-07-16
  • 打赏
  • 举报
回复
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);
}
这个主要考虑szName是局部变量,字符拷贝没有意思。这个函数结束,拷贝可能完全失去作用。
mayaaaaa 2007-07-16
  • 打赏
  • 举报
回复
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);
}

我认为问题是:如果lpszName长度大于等于16,则szName就不会得到一个终止符null的拷贝.
mayaaaaa 2007-07-16
  • 打赏
  • 举报
回复
Inhibitory() 所说:
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);// 如果lpszName的长度大于16,然后szName的长度就不够
}

无论传进来的参数lpszName的长度是否大于16,strncpy都限定的只copy 16个字符,应该不会是你所说的这个问题。
water_tian 2007-07-16
  • 打赏
  • 举报
回复
如果 memcpy(szName,"bqqadmin",16); 16改为strlen("bqqadmin")
是不是就不会出现
strncpy(szName,lpszName,16);// 如果lpszName的长度大于16,然后szName的长度就不够
water_tian 2007-07-16
  • 打赏
  • 举报
回复
大哥们 你们太伟大了 。。。 可惜我就是有10分了 要不然一定送你们多多的分
Inhibitory 2007-07-16
  • 打赏
  • 举报
回复
a) 用C++实现一个CDog类。

b) CDog有一个AddAge()函数,调用时,年龄+1,当Dog到了10岁时,就会dead.

c) CDog有一个Bark()函数(吠叫),调用时,显示"Wang wang ....."

d) 未说明之处,自由发挥,注意逻辑的合理性。

class 狗{
public:
狗(int age = 0) {
this->age = age;
}
void 又老了一岁() {
age++;
if (age ==10) {
去死吧();
}
}

void 去死吧() {
std::cout<<"狗死了"<< std::endl;
}

void 吠叫() {
std::cout<< "死狗,叫什么叫" << std::endl;
}

private:
int age;
};
Inhibitory 2007-07-16
  • 打赏
  • 举报
回复
错误多了去:
char szName[16];
memcpy(szName,"bqqadmin",16);
----------------------------
char szName[16];
strcpy(szName,"bqqadmin");
if( szName=="bqqadmin" ) // 字符串没有==这个运算符,要用strcmp
{
printf("Ok");
}
-------------------------------
void SetName(LPCTSTR lpszName)
{
char szName[16];
strncpy(szName,lpszName,16);// 如果lpszName的长度大于16,然后szName的长度就不够
}
---------------------------------
HRESULT Invoke(BOOL b)
{
HRESULT hr; // hr应该初始化
if( b )
{
hr = S_OK;
}
return hr;
}
guxingfeiyu 2007-07-16
  • 打赏
  • 举报
回复
1。很简单,自己写
2、A:"bqqadmin"是一个字符串常量,长度不够16字节,用memcpy复制超出其长度的字节到一个字符串中天知道会出现什么错误,也许程序会崩溃掉。
B:字符串比较不能直接等于。要用strcmp
C:SetName函数里没有判断传进来的参数的有效性,比如lpszName=NULL就出现问题了
D:hr没有初始化,HRESULT hr = S_FALSE ;
S_FALESE;
coolage31 2007-07-16
  • 打赏
  • 举报
回复
HRESULT Invoke(BOOL b)
{
HRESULT hr;
if( b )
{
hr = S_OK;
}
return hr;
}

我想是这里有错吧

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧