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

Izz*_*zzo 2 c printf

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

void enterString(char * my_string);
Run Code Online (Sandbox Code Playgroud)

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

char temp_str[100];
sprintf(temp_str, "My lucky number = %d", 11);
enterString(temp_str);
Run Code Online (Sandbox Code Playgroud)

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

enterString("My lucky number = %d", 11);
Run Code Online (Sandbox Code Playgroud)

谢谢

Jea*_*bre 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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 他为什么不直接调用`printf()`而不是这个函数呢?据推测,他的功能需要使用格式化的字符串. (2认同)