回复 79楼 有容就大
慢慢来吧,呵呵,这里还有一个例子,偶在写C字符串数据结构时用的,用于跨vc6和CodeBlocks(gcc)两个不同平台的。
写程序不只是要考虑成功实现。。。
**
*
功能: 字符串格式化
*
参数: s -- 字符串对象地址,fmt -- 格式化串,...可变参数
*
返回: int 值,0 表示成功,1 表示失败。
*
备注: 字符串不能为空
*/
int string_format(String s, const char *fmt, ...)
{
assert(s);
if( s && fmt )
{
Spri sp = (Spri) s->sprivate;
if( sp && sp->ch )
{
va_list argp;
#ifdef _MSC_VER
char buffer[BUFSIZ];
#endif
va_start(argp, fmt);
#ifndef _MSC_VER
sp->length = vsnprintf(NULL, 0, fmt, argp); /*获取格式化后所需要大小*/
#else
sp->length = _vsnprintf(buffer, BUFSIZ, fmt, argp);
#endif
va_end(argp);
/*重新分配内存*/
sp->ch = realloc(sp->ch, sp->length + 1);
if( sp->ch )
{
va_start(argp, fmt);
#ifndef _MSC_VER
vsnprintf(sp->ch, sp->length + 1, fmt, argp); /*格式化输出到字符串中*/
#else
_vsnprintf(sp->ch, sp->length + 1, fmt, argp);
#endif
va_end(argp);
set_error(STR_OK);
return 0;
}
sp->length = 0;
set_error(STR_MEM_FAILE);
return 1;
}
}
set_error(STR_IS_NULL);
return 1;
}