我有一个接受字符串(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);
由于
答案 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
相比,这并没有带来太大的影响,但现在你有了这个,
您可以添加“详细”模式的检查,登录文件,打印前缀,日期,...等消息之前......