[c语言]0xC0000005访问冲突

无意间写出这样的代码:
这是一段将字符串逆转的代码;

#include<stdio.h>
#include<string.h>
void reserve(char *str,int len)
{
	 char *left = str;
	 char *right = str + len - 1;
	 char temp;
	 while(left < right)
	 {
		temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	 }
}
int main()
{
 	char *str = "abcd";
 	reserve(str,strlen(str));
 	printf("反转后为%s",str);
 	return 0;
}

这段程序看似没有任何问题,逻辑都对。但是一调试就会出现这样的异常:
在这里插入图片描述
我左思右想找不出原因,最后发现,
问题出在char *str = “abcd”;身上,这样定义一个字符串变量str,str指针是保存在堆区,但是"abcd"是一个常量,是保存在常量区的,常量是不能被改变的。在函数中,*left = *right;这句话是要改变常量的值,所以当然会报异常。
  修改方法:将常量"abcd"定义到栈区或者全局变量就不会出现上述问题了。
char[10] = “abcd”;

猜你喜欢

转载自blog.csdn.net/Code_beeps/article/details/83684424