问题描述
- 急!!!!!!!!!!!C++中关于strcat()函数占用其他变量内存地址的问题?
- 源代码有点长,我就只贴关键部分了!
int main(){ /省略部分代码。。。。/ LinearList *L=(LinearList *)malloc(sizeof(LinearList)); InitList(LMAX); while(1){ printf(""Input file:""); gets(filename); //用get函数避免scanf以空格分割数据 if (filename[0]==34) filename[strlen(filename)-1]=0strcpy(filenamefilename+1); //支持文件拖曳但会多出双引号这里是处理多余的双引号 if (!strcmp(filenameexit"")) exit(0); //输入exit退出 if (!(fp=fopen(filenamerb""))) {printf(""Can not open this file!n"");continue;} //以二进制打开文件 fseek(fp 0 SEEK_END); //文件指针转到文件末尾 if((len=ftell(fp))==-1) {printf(""Sorry! Can not calculate files which larger than 2 GB!n"");fclose(fp);continue;} //ftell函数返回long最大为2GB超出返回-1 rewind(fp); //文件指针复位到文件头 A=0x67452301B=0xefcdab89C=0x98badcfeD=0x10325476; //初始化链接变量 flen[1]=len/0x20000000; //flen单位是bit flen[0]=(len%0x20000000)*8; memset(x064); //初始化x数组为0 fread(&x416fp); //以4字节为一组读取16组数据 for(i=0;i<len/64;i++){ //循环运算直至文件结束 md5(); memset(x064); fread(&x416fp); } ((char*)x)[len%64]=128; //文件结束补1补0操作128二进制即10000000 if(len%64>55) md5()memset(x064); memcpy(x+14flen8); //文件末尾加入原文件的bit长度 md5(); fclose(fp); char str1[8]; sprintf(str1%08x""PP(A)); char *s1=str1; char str2[8]; sprintf(str2%08x""PP(B)); char *s2=str2; char str3[8]; sprintf(str3%08x""PP(C)); char *s3=str3; char str4[8]; sprintf(str4%08x""PP(D)); char *s4=str4; strcat(str1str2); strcat(str1str3); strcat(str1str4); cout<<str1<<endl; char *p=str1; node x(pfilename); InsertElem(Lx); } Printout(L); return 0;}
然后问题是这样的:
通过调试发现:我在while循环外面定义和初始化了变量L之后,L的相关成员变量都有了内存地址。结果当运行完strcat(str1str2)之后,奇怪的是L变量的内存地址突然变了,导致它所有的成员变量都没有有效内存地址。接下来,任何需要传入L作为参数的函数都没有办法运行,报错。
请问:这是怎么一回事啊???解决办法是????或者我通过其他方法把str1、str2、str3连接起来????
解决方案
你分配的内存不够,字符串需要的大小是长度+1,因为还有一个结束符也需要1个元素。
时间: 2024-08-02 09:20:45