C 什么是正确的调用(void*buf)

C 什么是正确的调用(void*buf),c,C,我有一个dll文件要调用,如下所示。我想通过传递字符串来调用它。 MinGW编译它时没有任何警告,但运行它时会收到“invalid user buffer”消息。 我尝试通过以下方式传递字符串: int i = wrb(void *buf, int len) char subtext[] = "red"; void *buf; buf = subtext; i = wrb(buf, 3); 它怎么了?可能太小了?也许被调用的函数需要零终止,这是因为缓冲区太小而得不到的 目前还不清楚被调用函数如

我有一个dll文件要调用,如下所示。我想通过传递字符串来调用它。 MinGW编译它时没有任何警告,但运行它时会收到“invalid user buffer”消息。 我尝试通过以下方式传递字符串:

int i = wrb(void *buf, int len)
char subtext[] = "red";
void *buf;
buf = subtext;
i = wrb(buf, 3);

它怎么了?

可能太小了?也许被调用的函数需要零终止,这是因为缓冲区太小而得不到的

目前还不清楚被调用函数如何验证地址,这通常是不可能的

您不需要跳过
buf
hoop,数组名
子文本将自动正确地转换为
void*
,因此只需调用:

char subtext[4] = "red";
int i = wrb(subtext, sizeof subtext);

另外请注意,不应重复神奇常量(如
4
),请尽可能使用
sizeof

为什么不查看相关文档或手册/帮助。因为它没有文档记录。关于sizeof参数,您是对的,但上面的代码是真实代码的过度简化版本,重点关注问题。并且不需要asciiz格式,长度变量确保可以发送任何二进制缓冲区内容。问题是缓冲区寻址为错误报告状态。