我想封装sprintf函数, 请问要咋办?(300)

  • 主题发起人 无人喝彩
  • 开始时间

无人喝彩

Unregistered / Unconfirmed
GUEST, unregistred user!
刚学习 C++Builder, 发现 C++Builder中没有跟delphi一样方便的format函数.因为用CB中的fornat也要加上ARRAYOFCONST, 代码看起来很长, 感觉很不舒服:Memo1->Lines->Add(Format("%s %d %f", ARRAYOFCONST(("aaa", 888, 1.5))));所以, 我想到干脆把sprintf封装成为自己的函数, 但是sprintf的第3个参数是 点点点 "..."int _RTLENTRY _EXPFUNC sprintf(char * __buffer, const char * __format, ...);这可就难S我了.//==========================================================请帮初学的我建一和 头文件 "my.h" 和单元文件 "my.cpp"然后封装sprintf函数为一个 mysprintf 函数, 这个mysprintf函数的返回值是一个字符串, 就象delphi中的format那么方便.这样我使用起来就方便多了:Memo1->Lines->Add(MyFormat("%s %d", "我爱编程", 999));谢~~~
 

风铃夜思雨

Unregistered / Unconfirmed
GUEST, unregistred user!
Function sprintf(zFormat: PansiChar): PansiChar;
cdecl;
varargs;
external 'your.dll' Name 'sprintf';试试这样定义, 这是DELPHI的定义方法
 
G

guanyue7613

Unregistered / Unconfirmed
GUEST, unregistred user!
不是可以直接writeln吗?
 

地质灾害

Unregistered / Unconfirmed
GUEST, unregistred user!
#include "stdlib.h"AnsiString __cdecl MyFormat(const char *szFormat, ...){ va_list ArgumentList;
char szBuffer[1024] = {0};
va_start(ArgumentList, szFormat);
vsprintf (szBuffer, szFormat, ArgumentList);
va_end(ArgumentList);
//接下来如何以AnsiString的形式返回szBuffer楼主自己去搞。不知道BCB的怎么用}你返回的结果必须是编译器自动管理的比如AnsiString。如果你返回char* 那么这块内存肯定要在MyFormat内分配。你Add后 就没有任何一个指针指向这块内存 就泄漏了
 

白河愁

Unregistered / Unconfirmed
GUEST, unregistred user!
编译器魔法,放弃吧....PS: xxPrintxx 是公认不安全函数之一.
 
X

xusong168

Unregistered / Unconfirmed
GUEST, unregistred user!
用define 宏 可以把看起来很长的代码缩短
 

Similar threads

回复
0
查看
776
不得闲
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
586
import
I
顶部