我有一个接受字符串(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)
谢谢
你不能在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,但是现在你有了这个,你可以添加一个"详细"模式的检查,登录到文件,打印前缀,日期,......之前的消息等等...