目录
示例
代码示例:
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char* pstr = "Hello World";
pstr[0] = 'h';
printf("%s\n", pstr);
return 0;
}
运行环境:VS2022
以上代码编译时并不会报错,但运行时不会按预期在控制台输出信息,会异常退出,运行效果如下
原因:
pstr指针指向了字符串常量Hello World,字符串常量在程序中存储于常量区域,常量区域不可修改。在编译时没有直接显示限定指针指向的区域不可修改,C编译器并没有对此做出检查,所以编译不会报错,但运行时发生了对常量区的修改,所以会出现运行时错误。
对该程序使用调试模式运行,会报异常,异常信息为对写入位置发生访问冲突,如下所示:
解决方案
1. 知识点储备:常量在运行时不可修改,存储区域视图
2. 在实际编程和开发过程中,应保持良好的编程习惯,对常量使用const关键字做显示限定,让程序在编译时能早期发现错误,避免运行时的错误难以定位,运行时错误也会带来段错误、程序异常退出等bug。
以上代码示例在pstr定义时加const关键字限定,则程序编译报错:只读常量不可修改。