急!!!高手请进, 请教c语言的可变参数函数, 如何求字符串长度?

wangying50074076 2008-09-01 02:13:17
比如自定义写了个可变参数函数如下:

int format(string &str, const char *fmt, ...)
{
int iret = 0;

va_list marker;
va_start(marker, fmt);
...
(此处, 有办法可以求出传入参数等的总长度吗?)
...
char *buf = new char[nsize]; // (我想, 上面求出总长度, 再申请一片空间, 用于拷贝)
str = buf;
va_end(marker);

delete buf;
buf = NULL;
return iret;
}


用法, 例如: format(str, "%s/%d%d.txt", strPath, nhours, nminutes);
...全文
291 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangying50074076 2008-09-01
  • 打赏
  • 举报
回复
诸位可以试试, 看看

int nsize = vsnprintf(NULL, 0, fmt, marker) + 1;//(此处, 可以求出传入参数等的总长度)

是否是你需要申请的空间大小, 呵呵
blh 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangying50074076 的帖子:]
比如自定义写了个可变参数函数如下:

int format(string &str, const char *fmt, ...)
{
int iret = 0;

va_list marker;
va_start(marker, fmt);
...
(此处, 有办法可以求出传入参数等的总长度吗?)
...
char *buf = new char[nsize]; // (我想, 上面求出总长度, 再申请一片空间, 用于拷贝)
str = buf;
va_end(marker);

delete buf;
buf = NULL;
return iret;
}


用法, 例如: format(str, "%s/%d%d.txt",…
[/Quote]

你很难的到,你本不知道"%s/%d%d.txt"的最终长度
tian428 2008-09-01
  • 打赏
  • 举报
回复
vsnprintf不是返回成功写入的数据的个数么?
wangying50074076 2008-09-01
  • 打赏
  • 举报
回复
谢谢各位的热情帮助, 我已解决这个问题:

int format(string &str, const char *fmt, ...) ;// 函数声明
{
...
va_list marker;
...
int nsize = vsnprintf(NULL, 0, fmt, marker) + 1;//(此处, 可以求出传入参数等的总长度)
...
}


没想这个vsnprintf还有这个用处... 呵呵
wangying50074076 2008-09-01
  • 打赏
  • 举报
回复
传入长度, 似乎也比较繁琐... 比如传入一个整型, 还得转换成字符串求出长度, 再累加到总长度, 这么做法不太理想...
stareyess 2008-09-01
  • 打赏
  • 举报
回复
应该还是在靠参数传入比较现实。
hotonion 2008-09-01
  • 打赏
  • 举报
回复
MS 没有什么好办法
tian428 2008-09-01
  • 打赏
  • 举报
回复
直接把长度传过来吧
wangying50074076 2008-09-01
  • 打赏
  • 举报
回复
分别求,再相加? 我觉得很难吧...

谢谢你们的回复

同时等待高手进来能帮我, 期待~~~
hai040 2008-09-01
  • 打赏
  • 举报
回复
没办法
要不然有sprintf就够了,不会有snprintf
xqls_xqls 2008-09-01
  • 打赏
  • 举报
回复
分别求,再相加。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧