编译器不同引起的错误?如何解决?
一个加解密的简单问题,编程如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
int pswd[]={4,9,6,2,8,7,3};
int keyLen=sizeof(pswd)/sizeof(int);
char* jiami(char* str);
char* jiemi(char* str);
int main(){
char* s="the result of 3 and 2 is not 8";
cout<<"\n原文:"<<s<<endl;
s=jiami(s);
cout<<"\n密文:"<<s<<endl;
s=jiemi(s);
cout<<"\n解密后:"<<s<<endl;
system("pause");
return 0;
}
char* jiami(char* str){
char* p=str;
int i=0;
while(*p){
*p+=pswd[i];
if(*p>122) *p%=122;
*p++;
i=(i+1)%keyLen;
}
*p='\0';
return str;
}
char* jiemi(char* str){
char* p=str;
int i=0;
while(*p){
*p-=pswd[i];
if(*p<32) *p=(*p+122);
*p++;
i=(i+1)%keyLen;
}
*p='\0';
return str;
}
在VC++6.0和DEV-C++5(4.9.8.0)上编译均能通过,VC6编译的东东运行无误,但DEV-C++编译的运行到*P+=PSWD[I]时崩溃,将该句换成(INT *)P+=PSWD[I]后这句能运行,但到*P='\0'这里又崩溃.
请哪位高手帮忙释疑,不胜感激.