以下C函数:
int sprintf ( char * str, const char * format, ... );
Run Code Online (Sandbox Code Playgroud)
将格式化数据写入字符串.作为str传递的数组的大小应该足以包含整个格式化的字符串.但是,如果格式化字符串的长度未提前知道怎么办?如何使用此函数(或类似其他函数)写入格式化数据,其长度未知?
例如:
#include <stdio.h>
int main ()
{
char buffer [13];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a %d char long string\n",buffer,n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
缓冲区需要为13或更大才能使其正常工作.如果字符串长度未知,并且缓冲区(例如)已设置为5,则此操作无效.我需要能够为碰巧大于缓冲区的字符串动态分配或重新分配缓冲区的东西.
我正在寻找一个替换fprintf的函数
int fprintf ( FILE * stream, const char * format, ... );
Run Code Online (Sandbox Code Playgroud)
我不确定如何定义这样的函数,因为在format参数之后,此函数采用可变数量的参数.具体来说,它至少需要与格式中指定的一样多的附加参数.
更新我发现了一个关于这个主题的资源(http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html),但是这个例子似乎没有在我正在使用的操作系统Linux下编译.
替换fprintf的一个例子就是调用fprintf会有所帮助.
这不是功课.我只是一个试图学习如何在空闲时间编程的初学者.谢谢!