如果不知道函数参数的大小,我该如何仅分配所需的内存?
通常情况下,我会使用固定大小,并通过 sizeof
计算其余部分(注意:代码并不是为了让人理解,而是为了展示问题):
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
int test(const char* format, ...)
{
char* buffer;
int bufsize;
int status;
va_list arguments;
va_start(arguments, format);
bufsize = 1024; /* fixed size */
bufsize = sizeof(arguments) + sizeof(format) + 1024;
buffer = (char*)malloc(bufsize);
status = vsprintf(buffer, format, arguments);
fputs(buffer, stdout);
va_end(arguments);
return status;
}
int main()
{
const char* name = "World";
test("Hello, %s\n", name);
return 0;
}
然而,我认为这不是正确的方法......那么,我应该如何正确地计算所需的缓冲区大小呢?
malloc
引擎和当前场地的状态,但你可能是对的。使用free/malloc
对来替代realloc
至少是有效的,因为你无论如何都会覆盖它,而且可能更快或更高效。我个人仍然更喜欢基于堆栈的缓冲区作为初始尝试,如果需要额外的空间,则使用malloc
,因为这在大多数情况下不需要进行堆操作。 - paxdiablo