举个例子,我有一个函数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 int
的 unsigned short
;您是否要将其计为 sizeof(short)
或 sizeof(int)
可能取决于您打算如何处理答案。
关于c - 如何使用格式计算传递给 va_list 函数的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71390293/