c - 如何使用格式计算传递给 va_list 函数的字节数

标签 c variadic-functions

举个例子,我有一个函数foo()

int foo(const char* format,...) {
   va_list args;
   va_start(args, format)
   ...
   va_end(args);
   return bytes;
}

我有一个格式 "%d%lf%s" 和一些参数 int a、double b 和 char* c 是空终止字符串。 如何从 args 中提取变量并计算 sizeof(a)+sizeof(b)+sizeof(c)

最佳答案

您无法判断调用中传递了多少字节,无论这意味着什么。 (一些参数可以在寄存器中传递。一些参数之间可能有填充。)

您可以计算sizeof expected 参数的总和,但这很乏味。您需要解析格式字符串;每次找到格式说明符时,都会添加预期的相应参数的大小。确保将长度修饰符考虑在内;例如,%llu对应于sizeof(long long int)。但是,%hu 对应于已转换为 unsigned intunsigned short;您是否要将其计为 sizeof(short)sizeof(int) 可能取决于您打算如何处理答案。

关于c - 如何使用格式计算传递给 va_list 函数的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71390293/

相关文章:

Scala 和 SLF4J::传递多个参数

php - Nanopb - 用 PHP 解码

c++ - 创建和读取数据的速度

go - 为什么我的 for 循环不能正确循环元素?

c++ - move 语义 : invalid conversion from `type&&` to `type` . 模板:将未知参数传递给重载函数

c - printf 中 "%c"的默认参数提升和相关性

java - Java HashMap 中的 Varargs

c - 使用循环动态数组(2D)在 C 中 malloc 数组

c - 关于 struct 数组作为 gcc 和 vc 编译的参数

c - memcpy() 和 memmove() 未按预期工作