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

问题描述 投票:1回答:1

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

c pointers dbus
1个回答
1
投票

您缺少#include

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.