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