创建一个my_printf,将数据发送到sprintf和普通的printf?
我正在玩printf和想法
写一个调用普通printf的my_printf(…) 以及将结果发送到特殊功能的sprintf. (我在考虑sprintf,因为在大多数平台上它的行为与printf一样). 我的想法是编写一个执行此操作的小宏: #define my_printf(X,Y...) do{ printf(X,## Y); char* data = malloc(strlen(X)*sizeof(char)); sprintf(data,X,## Y); other_print(data); free(data);}while(0) 但是由于sprintf可以将字符串扩展到比X大得多的大小, 只是为了添加一个数字,malloc似乎是解决问题的错误方法, 有没有人对如何解决这个问题有更好的想法? 谢谢 更新:我忘记了printf返回打印的字符数, #define buf_printf(X,Y...) do{ int len = printf(X,## Y); char* data = malloc((len+1)*sizeof(char)); sprintf(data,## Y); other_print(data); free(data);}while(0) 更新:我正在考虑这个,也许是使用正常的功能 再次感谢 解决方法
最好的方法是使用varargs.使用与printf()相同的原型创建一个函数,并使用varargs函数将数据传递给sprintf以填充所需的缓冲区,并在返回之前将该缓冲区传递给printf(“%s”).
许多早期的实现对最低级别的printf()调用有4K限制,但我会选择更多.您可能需要设置一个上限并坚持下去. 我们在日志记录系统中使用的一个技巧是使用printf()将数据写入/ dev / null句柄.由于printf()返回写入的字符数,因此我们使用它来分配缓冲区.但这不是很有效,因为它涉及调用printf() – 类型函数两次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |