有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

时间:2017-09-07 16:06:13

标签: c printf

我有一个接受字符串(char数组)作为参数的函数。

void enterString(char * my_string);

使用此功能时,我经常发现自己想要输入格式化的字符串。我使用sprintf来做到这一点。但是,我每次都必须创建一个临时字符串,这有点烦人:

char temp_str[100];
sprintf(temp_str, "My lucky number = %d", 11);
enterString(temp_str);

有没有办法在函数参数中直接格式化字符串,所以我不必每次都创建一个临时字符串?类似的东西:

enterString("My lucky number = %d", 11);

由于

1 个答案:

答案 0 :(得分:5)

你不能用C语言做到这一点(不像其他语言,如python,它有%运算符或str.format函数的字符串的内置格式。)

但是因为您的方法看起来像是要打印带有变量参数的格式化消息,所以您可以使用vfprintf来接受va_list参数,这样您就可以转移你的内部函数的变量参数。

#include <stdio.h>
#include <stdarg.h>

void enterString(const char *format,...)
{

  va_list argptr;
  va_start(argptr, format);
  vfprintf(stdout, format, argptr);
  va_end(argptr);
  // rest of the processing here
}

int main()
{
   enterString("My lucky number = %d", 11);
   return 0;
}

printf相比,这并没有带来太大的影响,但现在你有了这个, 您可以添加“详细”模式的检查,登录文件,打印前缀,日期,...等消息之前......