以下是本人写的一个字符串的逆序函数:
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–;
}
}