从变量参数函数中获取字符串

时间:2020-02-05 20:54:58

标签: c pointers dbus

我试图将双指针传递给变量自变量函数,以便可以在其中存储字符串(在示例中为“ 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总线方法。

1 个答案:

答案 0 :(得分:1)

您缺少#include

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

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

此外,由于您知道get_value的参数的类型为const char **,因此应将其传递给va_arg而不是void *并更改{{ 1}}进行匹配。