我对C很新.最近我一直致力于通过套接字,MQSeries和其他途径从一堆其他系统获取输入的系统.基本上我的工作是将这些不同的源集合在一起,并将它们放入一种类似于本地的XML格式,并将它们存储在适当的数据库中,或者将它们传递给其他系统.因此,我一直在创建格式化字符串.非常简化他们看起来像这样:
"
所以我开始使用sprintf和vsprintf,并且很容易编写一个例程来连接sprintf的格式字符串,但问题是我没有关于我收到的字符串长度的高级知识所以很难知道它的大小要分配的缓冲区.我得到的字符串可以是25个字节长或250k字节.不说.所以我当然要过一次或两次缓冲.这导致我使用snprintf,这是好的,但只是将负载传递给我,以便在它们被截断时重新分配缓冲区并再次尝试.
所以我知道这不是宇宙中最大的问题,我可以自己加总长度,但有没有办法让它在C中更容易一些,或者我应该停止抱怨并找出某种递归函数来添加提前完成所有字符串长度?
最佳答案
就像许多事情一样,有人在你发牢骚之前然后划伤了痒. asprintf and vasprintf来救援.他们并没有比sprintf做更多的事情,但他们确实做了困扰你的事情,即弄清楚需要多少空间然后分配它,格式化字符串,并将其传递给你.
原文链接:https://www.f2er.com/linux/440003.html几点需要注意:
>如果出现问题,他们将返回-1,如果没有则返回字符串的长度
>完成后,您需要记住释放字符串.
>它们不属于C或POSIX,因此您的平台可能没有它们.
>由于您使用的是Linux,因此可以使用它,但您需要定义_GNU_SOURCE功能宏
一个半荒谬的例子:
#define _GNU_SOURCE
#include dio.h>
#include