我试图将双指针传递给变量自变量函数,以便可以在其中存储字符串(在示例中为“ 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
。
您所包含的include都不包含的声明strdup
。因此,编译器使用返回的函数的隐式函数声明int
。指针和的int
大小很可能在您的系统上不同。隐式声明和真实声明之间的不匹配导致未定义的行为。
该strdup
函数要求您#include <string.h>
进行正确的声明。
另外,因为您知道to的参数get_value
是type const char **
,所以应该将其传递给va_arg
代替,void *
然后更改p
to的类型以进行匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句