函数指针中的参数列表
argument list in Function pointer
我可以在我的函数中打印 2 个以上的参数 ptr * Os_printf * 但我的函数仅适用于 1 个参数。
例如-->
Os_printf("Moon %d %d",55,5);
外:
月亮 55 5
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
char db[50];
void test_1(int (*debug)())
{
debug("JOY %d %d n",4,55);
}
volatile int (*ptr_fscreener)(char * __restrict, const char * __restrict, ...);
void Os_formater(int (*debug)() )
{
ptr_fscreener=debug;
}
void Os_printf(const char * __restrict out,void**d)
{
va_list args;
char db[50];
ptr_fscreener(db,out,d);
puts(db);
}
int main(void) {
Os_formater(sprintf);
Os_printf("Moon %d",55);
test_1(printf);
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
/******* OUTPUT For example ******/
Moon 55
JOY 4 55
!!!Hello World!!!
您需要使用<stdarg.h>
,并且可能需要使用vsnprintf()
,以及许多其他更改:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void test_1(int (*debug)(const char *format, ...))
{
debug("JOY %d %dn",4,55);
}
static int (*ptr_fscreener)(char *, size_t, const char *, va_list);
void Os_formatter(int (*debug)(char *buffer, size_t buflen, const char *format, va_list args))
{
ptr_fscreener = debug;
}
void Os_printf(const char *out, ...)
{
va_list args;
char db[50];
va_start(args, out);
ptr_fscreener(db, sizeof(db), out, args);
va_end(args);
puts(db);
}
int main(void)
{
Os_formatter(vsnprintf);
Os_printf("Moon %d",55);
test_1(printf);
puts("!!!Hello World!!!");
return EXIT_SUCCESS;
}
只要正确使用它,使用 vsnprintf()
就可以在一定程度上防止缓冲区溢出。 恢复使用vsnprintf()
相当简单;我认为不可能可靠地使用snprintf()
或sprintf()
。
汇编:
gcc -O3 -g -std=c99 -Wall -Wextra va.c -o va
结果:
Moon 55
JOY 4 55
!!!Hello World!!!
相关文章:
- 概念中的cv限定符需要表达式参数列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 错误 没有与参数列表匹配的重载函数"getline"实例
- std::vector 没有重载函数的实例与参数列表匹配
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 构造函数/函数声明参数列表中的统一初始化
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 带有整数的变量参数列表
- 转发变量参数列表以模拟 std::thread
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- C++-将具有引用的长参数列表重构为结构
- 缺少别名模板C++参数列表
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 我可以使用宏自动构建参数列表吗?
- 类成员函数参数列表是否可以依赖于模板参数?