您的位置:首页 > 编程语言

【编程经验】一个关于常量不能被修改的错误

2015-06-19 00:15 155 查看
运行报错:

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'; 		//编译的时候就会在这里报错!
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: