const char* strrep(listing list) {
//https://stackoverflow.com/q/4836534/9295513
char* retVal = //...
return retVal;
}
我有一个称为listing
的结构类型。是否有办法格式化元素,就像通过用printf
调用("%d %d %s...", list->elem_one, list->elem_two, list->elem_three...)
但将输出写入char
数组而不是标准输出一样?
您想要的功能是snprintf
。它创建一个格式化的字符串,并将其以给定的大小而不是stdout写入给定的char *
参数。
例如:
int len = snprintf(NULL, 0, "%d %d %s...", list->elem_one, list->elem_two, list->elem_three...);
char *retVal = malloc(len+1);
snprintf(retval, len+1, "%d %d %s...", list->elem_one, list->elem_two, list->elem_three...);
第一个调用用于确定需要多少空间。然后,您可以分配适当的空间量并再次调用snprintf
以创建格式化的字符串。
如果我没看错的话,您希望将其打印到缓冲区中,而不是打印到控制台或文件中。如果是这种情况,则需要使用sprintf
,或者它是有界表弟snprintf
。这是cplusplus网站上的示例:
#include <stdio.h>
int main ()
{
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a string %d chars long\n",buffer,n);
return 0;
}
请注意,sprintf
会自动附加一个空终止符,但是要确保字符串的总长度可以适合给定的缓冲区,这仍然取决于您。