从可变参数函数获取字符串

Get string from variable argument function

我正在尝试将双指针传递给可变参数函数,以便我可以在其中存储一个字符串(在我的示例中为 "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

您拥有的

None 个包含 strdup 的声明。因此,编译器使用返回 int 的函数的隐式函数声明。指针和 int 在您的系统上很可能是不同的大小。隐式声明和真实声明之间的不匹配导致 undefined behavior.

strdup 函数要求您 #include <string.h> 进行正确的声明。

此外,因为您知道 get_value 的参数是 const char ** 类型,您应该将其传递给 va_arg 而不是 void * 并更改p 匹配。