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

2024-05-21

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

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);

Thanks


你不能在 C 中执行此操作(与其他语言(如 python)不同,它们具有内置的字符串格式%运算符或str.format功能)。

But由于您的方法看起来像您想要打印带有变量参数的格式化消息,因此您可以使用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,但现在你有了这个, 您可以添加对“详细”模式的检查、记录到文件、在消息之前打印前缀、日期等...

我在 musashi 680x0 模拟器中找到了这个确切的代码(在 m68kfpu.c 中)

static void fatalerror(char *format, ...) {
  va_list ap;
  va_start(ap,format);
  vfprintf(stderr,format,ap);
  va_end(ap);
  exit(1);
}

(我必须纠正错误fprintf这是在代码中,但除此之外,我们看到了一个直接的应用程序:该函数用于打印可变格式的错误消息,然后退出到操作系统)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐