怎么同样是在vc6里面编译,有的地方编译通过,有的地方就报越界错误呢?
CHAR UserCode[5]="\0\0\0\0\0"; 问题点数:50、回复次数:15Top
1 楼milozy1983(Detective)回复于 2004-12-02 18:29:21 得分 6
you should declare the size of array is 6 and 5 is not savelyTop
2 楼njzsj(沧海一声笑)回复于 2004-12-03 08:26:03 得分 0
在别人的代码里面有这句话,他的程序能编译通过,而我单独把这句话拿出来编译就会报错,请帮忙解决!Top
3 楼goodluckyxl(被人遗忘的狗)回复于 2004-12-03 08:31:55 得分 10
CHAR UserCode[]="\0\0\0\0\0";Top
4 楼imRainman(雨人)回复于 2004-12-03 08:41:22 得分 1
把完整的代码贴出来看看Top
5 楼wwxsoft(婉儿)回复于 2004-12-03 08:46:40 得分 1
markTop
6 楼njzsj(沧海一声笑)回复于 2004-12-03 09:05:28 得分 0
#include <windows.h>
#include <stdio.h>
#include <ostream.h>
typedef BYTE mmsSubISDN_T[10];
SHORT ReverseBCD(BYTE *BCD, SHORT size)
{
BYTE ch = 0;
SHORT i = 0;
for (i=0; i<size; i++)
{
ch = BCD[i];
BCD[i] = (ch>>4)+((ch&0x0f)<<4);
}
return size;
}
SHORT BCDToString(CHAR* Buffer, BYTE* BCDStr, SHORT Size)
{
SHORT i = 0;
SHORT j = 0;
for (j=0; j<Size; j++)
{
if (BCDStr[j] <= 15)
i += sprintf(Buffer+i, "0%X", BCDStr[j]);
else
i += sprintf(Buffer+i, "%X", BCDStr[j]);
}
return i;
}
WORD FindIndex(mmsSubISDN_T User_Isdn)
{
INT low,up,m=0;
CHAR UserCode7[20];
CHAR UserCode[20]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
LONG AreaCode;
int iIsdnLength = 0;
int i = 0;
int j = 0;
memset(UserCode,0xff, sizeof(UserCode));
memset(UserCode7,0x00, sizeof(UserCode7));
memcpy(UserCode,User_Isdn,sizeof(mmsSubISDN_T));
ReverseBCD((BYTE *)UserCode,sizeof(mmsSubISDN_T));
while ( i < sizeof(mmsSubISDN_T))
{
if(((BYTE)UserCode[i] & (BYTE)0xf0) == (BYTE)0xf0)
{
break;
}
if(((BYTE)UserCode[i] & (BYTE)0x0f) == (BYTE)0x0f)
{
iIsdnLength = iIsdnLength + 1;
break;
}
i++;
iIsdnLength = iIsdnLength + 2;
}
//if(iIsdnLength > 10)iIsdnLength = 10;
cout << iIsdnLength << endl;
BCDToString(UserCode7,(BYTE *)UserCode,10);
cout << UserCode7 << endl;
for(j = iIsdnLength ; j >= 0; j--)
{
// UserCode7[9] = 0;
UserCode7[j] = 0;
cout << UserCode7 << endl;
/*delete by wgw*/
AreaCode = atoi((const char *)UserCode7);
cout << AreaCode << endl;
}
return 0;
}
int main()
{
mmsSubISDN_T a ={0x01,0x03,0x05,0x01,0x02,0x05,0x00,0x00,0x00,0x00};
FindIndex(a);
return 0;
}Top
7 楼njzsj(沧海一声笑)回复于 2004-12-03 09:08:27 得分 0
这是我整理的自己调试的代码,原来的程序只是各个函数分布在不同的文件里面,我什么都没有修改!!!!!但是这边却编译不通过!!!哎,搞不清楚了,编译不通过还能找到解释的理由,可是那边却编译通过了,而且FindIndex代码用了很久!!!Top
8 楼hunter606(混特)回复于 2004-12-03 09:23:13 得分 10
CHAR UserCode[20]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
LONG AreaCode;
int iIsdnLength = 0;
int i = 0;
int j = 0;
memset(UserCode,0xff, sizeof(UserCode));
CHAR UserCode[20]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
沒有必要,賦初值後又被覆蓋。Top
9 楼imRainman(雨人)回复于 2004-12-03 09:57:45 得分 1
汗,这么奇怪的问题...
能不能把整个程序发到我的邮箱里呢?imRainman@hotmail.com
我来帮你研究一下~Top
10 楼pacman2000(pacman)(影子传说)回复于 2004-12-03 10:01:21 得分 1
呵呵! 纯粹是无聊的写法。 直接用memset的那句就可以了啊。Top
11 楼njzsj(沧海一声笑)回复于 2004-12-03 10:21:09 得分 0
是很无聊,但是怎么就能编译通过呢?Top
12 楼njzsj(沧海一声笑)回复于 2004-12-03 10:21:59 得分 0
全部代码就不发了,发了你也无法编译运行,实在太大了.真是不好意思了!Top
13 楼wl2k(没人知道)回复于 2004-12-03 14:29:38 得分 5
与程序无关,应该是你工程设定的问题。Top
14 楼sunlu_eric(天使预备役)回复于 2004-12-03 14:43:21 得分 15
钱能的C++上说,如果我定义char a[5];
这个字符串,我只可以存四个字符,而不是五个(只是自己看书后的理解)!
(意思是说这个字符串为a[0],a[1],a[2],a[3],a[4],最后一个a[4]留存NULL.)
但我的如果存五个都没有问题,是不是和不同的编译器也有关,
其实我觉得到不用限的太死,可以把树组定义的大些,不过在用的时候注意就可以了,
反正我认为比不够好的多!!!
Top
15 楼njzsj(沧海一声笑)回复于 2004-12-03 16:03:31 得分 0
搞了半天,原来标准C是支持这种初始化的.Top




