[我正在尝试将双指针传递给变量参数函数,以便可以在其中存储字符串(在示例中为“ 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总线方法。
您缺少#include
。
[您都不包含] strdup
的声明。因此,编译器使用返回int
的函数的隐式函数声明。指针和int
的大小很可能在您的系统上不同。隐式声明和实际声明之间的不匹配导致undefined behavior。
strdup
函数要求您#include <string.h>
进行正确的声明。
而且,因为您知道get_value
的参数是const char **
类型,所以应将其传递给va_arg
而不是void *
并更改p
的类型以匹配。