字符集的问题
在C++Builder中,遇到这样一个问题:
1、在文本框输入一些汉字
2、将这些文本框内的汉字存入变量中,与另一个字符串变量进行位运算“^”
3、通过Socket将运算结果发送出去
在这样的一个过程中,如果输入的汉字比较生僻,会报错如下:
Access violation at address XXXXXXXX in module 'XXX.exe'.Read of address XXXXXXXX
程序执行到这一句话时报的:ClientSocketMain->Active = true;
请问这是哪里出的问题?该如何解决?谢谢!!!!!!!!
[解决办法]
补充说明一下:
#define REVMAXLEN 512000
char key_t[1+1];
char SendBuf[REVMAXLEN];
这样的用法是“有问题的”,从语法角度看没有任何问题,但实际上出现问题可能会无比诡异,虽然我看到你这里只有一个变量是这样的缓冲区定义使用方法,但我估计你还有其它地方也有类似的用法,char SendBuf[REVMAXLEN];实际上申请了512K缓冲,特别要记住这个缓冲是在栈上的(不是堆上),假如你再有一个或几个这个的512K缓冲区用法同时起作用,程序迟早挂掉,DEBUG版本不出问题,RELEASE也会出问题。
挂掉的原因:程序编译后栈默认大小只有1M,这种用法会造成栈溢出。
解决方法:char *SendBuf = new char[REVMAXLEN]; // 在堆上申请内存,再在用完以后delete []SendBuf;
希望楼主出错不是我说的这个情况,但我以前一个同事,他做了几年的C++程序员,始终搞不定一个程序挂掉的原因,后经本人走查代码发现并解决。
[解决办法]
如果我没猜错的话key_r被声明为了char类型,建议调整声明为unsigned char
或者把下面的代码
sprintf(tmps, "%02x%02x%02x%02x%02x%02x%02x%02x|", key_r[0],key_r[1],key_r[2],key_r[3],key_r[4],key_r[5],key_r[6],key_r[7]);