急!帮忙啊。对缓冲区的第一个字节进行初始化,然指针后移,对缓冲区里面的数据进行处理,这会产生什么问题吗?

daijian1982 2003-05-29 09:58:31
1 AnsiString SSendOri="我爱你";
2 char* SendBuf = new char[ SSendOri.Length() + 1 ];
//把字符串放到字符数组里面,以进行加密
//缓冲区第一个字节放的是加密类型
3 SendBuf[0]='C'; //当不加这句话时,程序能行。
4 strcpy( SendBuf+1, SSendOri.c_str() );
//加密,第一个字节不加密
5 des_enc(SendBuf+1,1);
//我需要把字符数组再转化成AnsiString型,以供发送所以加了下面两行代码,把这两句拿掉就没有问题


//问题是:为什么这两行代码会影响SendBuf呢?(调试时发现的确影响)
6 AnsiString SSendDec;
7 SSendDec=String( SendBuf);
//解密
8 des_dec(&dc, SendBuf+1,1);

当把3拿掉时,程序可行(能成功解密)!
当把6.7拿掉时,程序也可行(能成功解密),但当他们同时存在是便不行了,这是什么原因呢?搞都搞不明白。
...全文
58 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedodo 2003-06-16
  • 打赏
  • 举报
回复
3Q
bacer 2003-06-12
  • 打赏
  • 举报
回复
string和char[]对数组的实现不同,string可以记录数组的长度,但是char[]是跟据你分配时候的长度来确定的,+1就是为了保留一个'\0'作为数组的结束标志.否则就会产生内存越界的访问
warton 2003-05-30
  • 打赏
  • 举报
回复
ThinkX说得对
daijian1982 2003-05-30
  • 打赏
  • 举报
回复

大哥们,可是好像你们说的有问题啊!
char* SendBuf = new char[ SSendOri.Length()+1];
这里无论我是+1,还是+2,甚至+0, SendBuf都是"C我爱你",SendBuf[7]是'\0';这没有问题啊!
加密后SendBuf的数据是"a@ A#F xF0",可是当执行完6.7,SendBuf竟发生了变化成了:"a@ A#F x1A",这是什么原因??? String( )这个函数有问题?

fatwave 2003-05-30
  • 打赏
  • 举报
回复
char类型中结尾用'/0',所以你少了1位
char* SendBuf = new char[ SSendOri.Length() + 1 ];
应该为
char* SendBuf = new char[ SSendOri.Length() + 1 + 1];
第1个1 为
SendBuf[0]='C'; //当不加这句话时,程序能行。
第2个1 为
结尾'/0'
hitbabiq 2003-05-30
  • 打赏
  • 举报
回复
ding
bluedodo 2003-05-30
  • 打赏
  • 举报
回复
为什么 char* SendBuf = new char[ SSendOri.Length()+1];
要 .length()+1?
bluedodo 2003-05-30
  • 打赏
  • 举报
回复
looking...
bacer 2003-05-30
  • 打赏
  • 举报
回复
你ShowMessage一下sizeof(SendBuf)是多少
SendBuf[7]是'\0'并不代表你的SendBuf没有越界
试试看下面的代码
char *buf = new char[2];
strcpy(buf,"123456789");
查看buf[9]='\0',但是很明显就已经越界了


fatwave 2003-05-30
  • 打赏
  • 举报
回复
把程序发来看看
qibo999 2003-05-29
  • 打赏
  • 举报
回复
是的,你少分配了一个字符,导致指针越界了。
ThinkX 2003-05-29
  • 打赏
  • 举报
回复
char* SendBuf = new char[ SSendOri.Length() + 1 ];
中应该再多分配一个字节,因为Length()中不包括末尾'\0'的长度。
而你却要
strcpy( SendBuf+1, SSendOri.c_str() );,这样最后一个字节就没有了,也没有了'\0'结尾了。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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