我有一个接受字符串的函数,即:
void log_out(char *);
在调用它时,我需要动态创建一个格式化字符串,如:
int i = 1;
log_out("some text %d", i);
如何在ANSI C中实现这一点?
只是,由于sprintf()
返回一个int,这意味着我必须至少编写3个命令,如下所示:
char *s;
sprintf(s, "%d\t%d", ix, iy);
log_out(s);
有没有办法把这个剪短?
我有一个接受字符串的函数,即:
void log_out(char *);
在调用它时,我需要动态创建一个格式化字符串,如:
int i = 1;
log_out("some text %d", i);
如何在ANSI C中实现这一点?
只是,由于sprintf()
返回一个int,这意味着我必须至少编写3个命令,如下所示:
char *s;
sprintf(s, "%d\t%d", ix, iy);
log_out(s);
有没有办法把这个剪短?
使用sprintf.(这不安全,但OP要求提供ANSI C答案.请参阅安全版本的注释.)
int sprintf ( char * str, const char * format, ... );
将格式化数据写入字符串组成具有相同文本的字符串 如果在printf上使用了format,则将打印它,而不是 打印时,内容以C字符串形式存储在缓冲区中 由str指向.
缓冲区的大小应该足够大,以容纳整个缓冲区
终止的空字符将自动附加在
在format参数之后,函数至少需要相同数量的
str
指向存储结果C字符串的缓冲区的指针.缓冲区
format
C字符串,其中包含一个格式字符串
... (additional arguments)
根据格式字符串的不同,函数可能需要一系列
// Allocates storage
char *hello_world = (char*)malloc(13 * sizeof(char));
// Prints "Hello world!" on hello_world
sprintf(hello_world, "%s %s!", "Hello", "world");