以下是本人写的一个字符串的逆序函数:
void reverse2(char *s)
{
int i=0,j;
char *p1;
p1=s;
int len;
len=strlen(s);
char temp;
while(len>0)
{
temp=*(s+len-1);
*(s+len-1)=*(p1+i); //运行到这里报错:0x00b34fba 处未处理的异常: 0xC0000005: 写入位置 0x00b3ba04 时发生访问冲突
*(p1+i)=temp;
len--;
i++;
}
//cout<<p1<<endl;
}
为什么在转换时会报C0000000005错误呢?
解决方案:20分
函数本身没问题,本人估计你函数参数s是不是分配在了常量区
假如你函数是中参数是用char* s = “abcd”;这样分配的话那就会出错,原因是这样的字符串是在常量区,不允许修改
假如是这样,你需要改成char[] s = “abcd”, 这样就是在栈上分配,可以修改
假如你函数是中参数是用char* s = “abcd”;这样分配的话那就会出错,原因是这样的字符串是在常量区,不允许修改
假如是这样,你需要改成char[] s = “abcd”, 这样就是在栈上分配,可以修改
解决方案:20分
你要逆序,循环的次数错了。 循环次数应该是 字符串长度 / 2
void fun(char* p)
{
int len = strlen(p);
int sum = len / 2;
int i = len – 1;
int j = 0;
while (sum > 0)
{
char sz = *(p + i);
*(p + i) = *(p + j);
*(p + j) = sz;
i–;
j++;
sum–;
}
}
void fun(char* p)
{
int len = strlen(p);
int sum = len / 2;
int i = len – 1;
int j = 0;
while (sum > 0)
{
char sz = *(p + i);
*(p + i) = *(p + j);
*(p + j) = sz;
i–;
j++;
sum–;
}
}