这两天写程序遇到一个问题,用字符指针去修改字符串中的字符,运行时程序崩溃。调试的时候弹出窗口报错--"Access violation writing location..."。后来查了查资料,发现是没有区分好字符串指针和字符串数组的概念。记录下来。
错误的程序代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
char *pStr = "hench"; //
char *p = pStr; //
*p = 'H'; //修改首字母
return 0;
}
查了查资料,原因小结如下:
char *pStr = "hench";
上面的声明是字符串指针,指针指向字符串常量存放的内存,可读不可写。
如果直接修改pStr[n] = 'x' 或者用字符指针去间接修改字符串的内容,程序调试运行时会报“
Access violation writing location”错误。
char cStr[] = "hench";
上面声明的才是字符串变量,程序把存放“hench”的内存(只读区域)复制到cStr的内存中,以后操作的就是cStr变量,可读可写。