指针问题

C++语言 码拜 9年前 (2015-11-15) 919次浏览
以下是本人写的一个字符串的逆序函数:

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”, 这样就是在栈上分配,可以修改
解决方案: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–;
}
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明指针问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)