struct info
{
int  ID;
char Key[128];
}TestInfo;
TestInfo.ID = 100;
memcpy_s(&TestInfo.Key, 128, "TestInfromation", 128 ) int iInfoLen = sizeof( info );
char *pInfo = new char[iInfoLen*2+1];  //请注意这一行
mysql_escape_string( pInfo ,(char*)&TestInfo, iInfoLen );
SqlCommand(&MySql, "update test set info='%s' where ID=1", pInfo );//自己写的一个函数         delete[] pInfo;现在的问题是 pInfo 的长度为 iInfoLen+1 时,在最后delete时,程序会崩溃
如果 pInfo 的长度为 iInfoLen*2+1 时,在最后delete程序就不会崩溃,这是为什么啊?按理说pInfo长度为iInfoLen+1时应该也能装下TestInfo里面的数据啊

解决方案 »

  1.   

    escape会对字符做转义,长度会比原来的长,具体数量不确定,但是很容易发生越界的情况,此时释放内存程序就会崩溃吧
      

  2.   

    总起来说是转义的问题:主要包括两个方面,一是ASCII可见字符,二是不可见的控制字符(如字符串的结束符,回车符,换行符等)。
    转义就是将那些不可见的字符用两个可见的字符(\加一个另外的符)来表示,如串结束符0x00就用“\0”两个字符来表示,回车0x0D就用“\r”两个字符来表示,等等。极端情况下,你给出的TestInfo中的每一个字节都需要转义的话,其结果长度就是原长度的2倍,再加上一个结束符就是2倍加1了。
    表述能力不好,希望能够理解。