gpt4 book ai didi

c - 将 char* 作为参数传递给动态调用的函数会产生运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:52 24 4
gpt4 key购买 nike

我有一个名为 testdynamic 的函数,它使用 dlopen 和 dlsym 动态调用。现在,我已经创建了一个结构:

typedef struct BigStruct{
char el[2000];
}BigStruct;

用于存储函数的参数。然后,我将空间分配给一个名为的变量:

void *cur = (void*)malloc(totalSize);

其中,totalSize 是参数的大小。我事先有这些信息。

之后,我将所有参数复制到 cur。

然后,我像这样将其转换为 BigStruct:

BigStruct *bg;
bg = (BigStruct*)cur;

然后像这样运行它:

void* ch = (void*)testdynamic(*bg);

现在,当我打印参数时,在函数 testdynamic 中,我得到了所有数据类型的正确值,如 char**int*、int 等。

唯一不起作用的数据类型是 char*。甚至在使用 *bg 调用函数之前,bg->el 的内容对于 char* 也是正确的。但是,调用之后,出现错误。

可能是什么问题?

这里是testdynamic的代码

char* testdynamic(char* x, char* y){
printf("%s %s\n", x, y);
return "hello";
}

我想从我的代码中将参数传递给函数 testdynamic。
这个 testdynamic 可以是任何函数,它可以接受任何类型的任何参数。
我在运行时获取有关该函数的信息。由于 char* 的大小为 1,我将所有内容都转换为 char*,然后将其传递给函数。
此时,如果我在 testdynamic 中打印 char* 类型的任何内容,我将收到运行时错误。

最佳答案

您假设 BigStruct 看起来完全像一个包含 2000 个字符的数组。这取决于编译器,不太可能是真的。我猜您真的想将 cur 指向的数据复制到 el 数组中,而不是将其全部写入 BigStruct 本身,后者将具有一些您不知道的内部存储格式。

关于c - 将 char* 作为参数传递给动态调用的函数会产生运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com