c– 更好的冲刺?

c– 更好的冲刺?,第1张

概述我对C很新.最近我一直致力于通过套接字,MQSeries和其他途径从一堆其他系统获取输入的系统.基本上我的工作是将这些不同的源集合在一起,并将它们放入一种类似于本地的XML格式,并将它们存储在适当的数据库中,或者将它们传递给其他系统.因此,我一直在创建格式化字符串.非常简化他们看起来像这样:'<tag>lotsa string data</

我对C很新.最近我一直致力于通过套接字,MQSerIEs和其他途径从一堆其他系统获取输入的系统.基本上我的工作是将这些不同的源集合在一起,并将它们放入一种类似于本地的XML格式,并将它们存储在适当的数据库中,或者将它们传递给其他系统.因此,我一直在创建格式化字符串.非常简化他们看起来像这样:

"

所以我开始使用sprintf和vsprintf,并且很容易编写一个例程来连接sprintf的格式字符串,但问题是我没有关于我收到的字符串长度的高级知识所以很难知道它的大小要分配的缓冲区.我得到的字符串可以是25个字节长或250k字节.不说.所以我当然要过一次或两次缓冲.这导致我使用snprintf,这是好的,但只是将负载传递给我,以便在它们被截断时重新分配缓冲区并再次尝试.

所以我知道这不是宇宙中最大的问题,我可以自己加总长度,但有没有办法让它在C中更容易一些,或者我应该停止抱怨并找出某种递归函数来添加提前完成所有字符串长度?

最佳答案就像许多事情一样,有人在你发牢骚之前然后划伤了痒. asprintf and vasprintf来救援.他们并没有比sprintf做更多的事情,但他们确实做了困扰你的事情,即弄清楚需要多少空间然后分配它,格式化字符串,并将其传递给你.

几点需要注意:

>如果出现问题,他们将返回-1,如果没有则返回字符串的长度
>完成后,您需要记住释放字符串.
>它们不属于C或POSIX,因此您的平台可能没有它们.
>由于您使用的是linux,因此可以使用它,但您需要定义_GNU_SOURCE功能宏

一个半荒谬的例子:

#define _GNU_SOURCE#include 
总结

以上是内存溢出为你收集整理的c – 更好的冲刺?全部内容,希望文章能够帮你解决c – 更好的冲刺?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1046580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)