请教一个简单语法问题!关于c_str( )和FormateDateTime( )函数的一个问题。(10分)

  • 主题发起人 主题发起人 2you2me
  • 开始时间 开始时间
2

2you2me

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序中有这样几句代码:
.... ....
sSQL = fmDM->Qry_Temp->FieldByName("RepSQL")->AsString.Trim();
sSQL = sSQL.sprintf(sSQL.c_str(),s1,s2,s3,s4);
.... ....
//程序运行到这里时,sSQL被赋值,是一个从数据库读出的很长的sql语句字符串;
//但是运行完第二句后sSQL变成了NULL,为什么?
当我把第二句直接改为:
sSQL = sSQL.sprintf(“select * .................”,s1,s2,s3,s4);
也就是把原来sSQL的值直接作为参数,运行则没有错误。这是为什么,请指教!
 
好像这是C++的内容
用C_str方法后,字符串会发生变化的,具体的我已经记不清,只记得C++编程思想上说过的
 
利用c_str时,好像是系统利用了可用的内存,如果当前没有被程序开辟好的内存,之后
可能会变为空值的,试试这个例子就知道了。
1、
AnsiString aa;
strcpy(aa.c_str(),"Who are you?");
ShowMessage(aa);
//这时aa的值为null
2、
AnsiString aa = " ";//静态开辟了内存
strcpy(aa.c_str(),"Who are you?");
ShowMessage(aa);//这个aa的值为Who are you?
 
不要存储AnsiString::c_str()结果
只要你给AnsiString变量附一个新字符串,AnsiString释放先前拥有的内存,并为新字符串附新的内存单元,一但新分配内存,那它与先前由c_str()函数返回的地址就不一样了.
还有很多~~~~~~~~~~~~~~~~~~~~~~
可以看一下,"避免C++BUILDER中的常见错误"这一文章,我也不记得是哪写的了
 
后退
顶部