#include <iostream>
using namespace std;
void jiami(char *a,int [],int);
void jiemi(char *b,int [],int);
int main()
{
char *secret = “the result of 3 and 2 is not 8”; //不能是char *secret = “the result of 3 and 2 is not 8”;
int num[]={4,9,6,2,8,7,3};
cout<<“加密前:”<<endl<<secret<<endl;
//cout<<secret[29]<<endl;
jiami2(secret,num,7);
//cout<<“加密后:\n”<<secret<<endl;
//jiemi(secret,num,7);
//cout<<“解密后:\n”<<secret<<endl;
return 0;
}
void jiami(char *a,int n[],int m)
{
if(a==NULL) return;
else
{
int i=0;
while((*a)!=”\0″)
{
*a=char(*a + n[i%m]);
if((*a)>122) *a=((*a)-122)%90+31;
a++;
i++;
}
a=a-i;
}
}
void jiemi(char *a,int n[],int m)
{
if(a==NULL) return;
else
{
int i=0;
while(*a!=”\0”)
{
*a-=n[i%m];
if(*a<32) *a=(123-(32-*a)%90);
a++;
i++;
}
a=a-i;
}
}
为什么一运行 void jiami(char *a,int n[],int m),void jiemi(char *a,int n[],int m)函数程序就崩掉了。
using namespace std;
void jiami(char *a,int [],int);
void jiemi(char *b,int [],int);
int main()
{
char *secret = “the result of 3 and 2 is not 8”; //不能是char *secret = “the result of 3 and 2 is not 8”;
int num[]={4,9,6,2,8,7,3};
cout<<“加密前:”<<endl<<secret<<endl;
//cout<<secret[29]<<endl;
jiami2(secret,num,7);
//cout<<“加密后:\n”<<secret<<endl;
//jiemi(secret,num,7);
//cout<<“解密后:\n”<<secret<<endl;
return 0;
}
void jiami(char *a,int n[],int m)
{
if(a==NULL) return;
else
{
int i=0;
while((*a)!=”\0″)
{
*a=char(*a + n[i%m]);
if((*a)>122) *a=((*a)-122)%90+31;
a++;
i++;
}
a=a-i;
}
}
void jiemi(char *a,int n[],int m)
{
if(a==NULL) return;
else
{
int i=0;
while(*a!=”\0”)
{
*a-=n[i%m];
if(*a<32) *a=(123-(32-*a)%90);
a++;
i++;
}
a=a-i;
}
}
为什么一运行 void jiami(char *a,int n[],int m),void jiemi(char *a,int n[],int m)函数程序就崩掉了。
解决方案
10
char *secret = “the result of 3 and 2 is not 8”; // secret 是个指针,指向常量区的字符串”the …”,这个字符串不能修改,一改就崩
char secret[] = “the result of 3 and 2 is not 8”; // secret是局部变量,编译器会在栈上分配空间,然后把字符串拷贝到这个空间,允许修改
char secret[] = “the result of 3 and 2 is not 8”; // secret是局部变量,编译器会在栈上分配空间,然后把字符串拷贝到这个空间,允许修改
10
5
是的,修改常量区数据导致的。可以将常量修改成数组,例如: char secret[100] = {“the result of 3 and 2 is not 8”};
10
char *secret = “the result of 3 and 2 is not 8”; 表示secret 指向常量区的常量字符串 “the result of 3 and 2 is not 8”
这个区域一般是禁止进行写操作的,你尝试写入就产生异常崩溃了。
要改成是堆或栈上申请的数组才行。
这个区域一般是禁止进行写操作的,你尝试写入就产生异常崩溃了。
要改成是堆或栈上申请的数组才行。
1
#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写,后果自负!
5
char *secret = “the result of 3 and 2 is not 8”; secret指针指向常量字符串,不能修改字符串的内容,直接用字符串数组吧!
4
字符串常量是禁止修改的。