我有一个接受字符串的函数,即:

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

C++相关问答推荐

变量的const视图是否定义良好?

修改pGM使用指针填充2-D数组但不起作用

字符串令牌化xpath表达式

如何正确地索引C中的 struct 指针数组?

在struct中调用函数,但struct在void中 *

变量>;-1如何在C中准确求值?

我可以在C中声明不同长度数组的数组而不带变量名吗?

进程在写入管道时挂起

用gcc-msse 2编译的C程序包含AVX 1指令

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

处理EPOLL_WAIT中的接收数据和连接关闭信号

我在反转双向链表时遇到问题

如何在不使用字符串的情况下在c中编写函数atof().h>;

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

如何在C中处理流水线中的a、n命令?

C 和 C++ 标准如何告诉您如何处理它们未涵盖的情况?

使用共享变量同步多线程 C 中的函数

malloc 属性不带参数

如何转义包含指令中的字符?

无法在线程内用 C 打印?