运行报错:
Unhandled exception at 0x001813d1 in test1.exe: 0xC0000005: Access violation writing location 0x00185832.
先直接上代码
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
char* respone = "2991541";
respone[5] = '\0'; //运行时会出错
}
声明的respone是一个常量,常量无法被修改。若尝试修改之,则会崩溃报错。
这样明显的错误我们不会犯,但是以下情况我们往往会犯错。
#include <stdio.h>
#include <iostream>
using namespace std;
void func1(char* ch)
{
ch[2] = '\0'; </span>//执行到这里的时候会报错。
}
void main()
{
char* respone = "2991541";
func1(respone); //将常量参数传入到func1中去了,
//但是在func1中的参数并不是const char* 类型的
return;
}
以上情况我们很容易忽视,这样就造成了编译通过,但是运行就会崩溃的情况。
稍微该以下就可以避免这种情况
void func1(char* ch)
{
ch[2] = '\0'; //执行到这里的时候会报错。
}
修改为
void func1(const char* ch)
{
ch[2] = '\0'; //编译的时候就会在这里报错!
}