什么是正确的呼吁(void * buf)

时间:2014-09-16 12:27:44

标签: c

我有一个要调用的dll文件,如下所示。我想通过传递我的字符串来调用它。 MinGW在没有任何警告的情况下编译它,但运行它我得到“无效的用户缓冲区”消息。 我尝试以这种方式传递我的字符串:

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

它出了什么问题?

1 个答案:

答案 0 :(得分:1)

也许它太小了?也许被调用的函数需要零终止,由于缓冲区很小,你没有得到它?

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

您无需跳过buf箍,数组名称subtext会自动正确转换为void *,因此请致电:

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

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