[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”;