您如何将格式化输出(例如从printf写入字符串?

问题描述 投票:0回答:2
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数组而不是标准输出一样?

c formatting char const
2个回答
3
投票

您想要的功能是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以创建格式化的字符串。


0
投票

如果我没看错的话,您希望将其打印到缓冲区中,而不是打印到控制台或文件中。如果是这种情况,则需要使用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会自动附加一个空终止符,但是要确保字符串的总长度可以适合给定的缓冲区,这仍然取决于您。

© www.soinside.com 2019 - 2024. All rights reserved.