我试图将双指针传递给变量自变量函数,以便可以在其中存储字符串(在示例中为“ hello world”),然后从主函数中将其打印出来,但是不起作用。
#include <stdio.h>
#include <stdarg.h>
void get_value(const char *str,...) {
va_list valist;
/* initialize valist for num number of arguments */
va_start(valist, str);
/* access all the arguments assigned to valist */
void *p;
p = va_arg(valist, void*);
char *tmp = strdup("hello world");
*(const char**)p = tmp;
/* clean memory reserved for valist */
va_end(valist);
}
int main() {
const char *t;
get_value("first", &t);
printf("%s\n", t);
}
我试图遵循lib sd-bus的实现,因为该实现在其中经常使用,但是到目前为止,我还无法解决此问题。
我的目标是将其用于模拟单元测试的sd总线方法。
答案 0 :(得分:1)
您缺少#include
。
您都没有包含strdup
的声明。因此,编译器使用返回int
的函数的隐式函数声明。指针和int
在您的系统上很可能具有不同的大小。隐式声明和实际声明之间的不匹配导致undefined behavior。
strdup
函数要求您#include <string.h>
进行正确的声明。
此外,由于您知道get_value
的参数的类型为const char **
,因此应将其传递给va_arg
而不是void *
并更改{{ 1}}进行匹配。