原来《Windows 程序设计》中的例子程序也会有错误

sr388 2001-10-12 08:58:03
当我看到上册P217页的"KEYVIEW1"程序后,我发现它有一个小错误。

我原封不动的把随书光盘上的"KEYVIEW1"程序复制到硬盘中开始编译时,VC++出现错误提示:

--------------------Configuration: keyview1 - Win32 Debug--------------------
Compiling...
keyview1.cpp
E:\Myfiles\CPP\keyview1\keyview1.cpp(112) : error C2440: '=' : cannot convert from 'void *' to 'struct tagMSG *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

keyview1.obj - 1 error(s), 0 warning(s)

出错的语句是112行:

pmsg = malloc (cLinesMax * sizeof (MSG)) ;

我的英文不太好,猜出来的意思是:不能把"void *"类型的指针转换成"struct tagMSG *"类型的指针。

原来malllc()函数在内存中分配空间后返回的指针是"void *"型,直接将这个"void *"类型的指针赋给pmsg是不正确的,必须要经过强制类型转换。

将112行稍作一下修改:

pmsg = (PMSG)malloc (cLinesMax * sizeof (MSG)) ;

结果就正确了。

虽然只是一个小错误,但对我这种新手来说,也真是麻烦。
...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sr388 2001-10-14
  • 打赏
  • 举报
回复
lj9852(老实狼),new好像是C++新增的运算符吧,在C中是不能用的,对吧?
zx3018 2001-10-13
  • 打赏
  • 举报
回复
VERY正常!
crazybit 2001-10-12
  • 打赏
  • 举报
回复
呵呵,不要太迷信权威。
在位图一节,CDIB类不能显示Windows目录下的 -- 安装程序.bmp
lj9852 2001-10-12
  • 打赏
  • 举报
回复

呵呵我干脆用new来代替

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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