定义函数GetName(LPSTR buffer, long nBufferLength)时,什么情况下省略nBufferLength参数也能保证strlen(buffer)能正常工作?

sodicc 2002-11-13 09:23:11

HRESULT GetName(LPSTR buffer, long nBufferLength)这个函数是在DLL里定义的,有可能被不同的模块不同的进程调用,那么在什么情况下,函数没有了nBufferLength这个参数而调用strlen(buffer)也能返回buffer的正确长度,从而不导致超界操作?

假如我要向另一个进程调用这个函数时,buffer参数可能要经历整形几次,例如(LPARAM)buffer,(LPVOID)buffer,等到目标进程调用strlen((LPSTR)buffer)有时返回值是4(效果跟调用sizeof(LPSTR)一样),不管buffer实际有多少字符都一样,真奇怪。

另外,SetName(LPSTR buffer)在任何情况下都不需要调用者传入buffer的长度,对不对?
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sodicc 2002-11-13
  • 打赏
  • 举报
回复
这办法不好。我只想知道什么情况会出什么问题,从而防患于未然。
GZCompiler 2002-11-13
  • 打赏
  • 举报
回复
我想了这样一个办法:
HRESULT GetName(LPSTR buffer)函数,对于buffer怎么着也能有1byte吧?
所以你可以把数组长度以二进制方式存在这一个字节中,2的8次方最大也有256呢。
在一进入函数时,就将该值解析出来。
GZCompiler 2002-11-13
  • 打赏
  • 举报
回复
SetName(LPSTR buffer)在任何情况下都不需要调用者传入buffer的长度,对不对?
----------------------------------
也不尽然,看你怎么使用buffer这个指针了,因为GetName和SetName函数没有
本质上的却别。只不过一般在SetName函数中只strcpy()什么的,所以不需要
buffer的长度。但是如果要逐一访问数组元素还是要知道边界的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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