指向char数组的指针的运行时中断错误

时间:2011-08-16 08:08:39

标签: c++ arrays pointers char

C ++ - 该程序在第2行给出了运行时中断错误。

char * ptr = "hello";
(*ptr)++;            // should increment 'h' to 'i'
cout<<ptr<<endl;     // should display 'iello' 

test.exe中0x004114b0处的未处理异常:0xC0000005:访问冲突写入位置0x00417830。

知道为什么会出现这个错误吗?然而,如果我运行以下代码,它可以正常工作。

char arr[] = "hello";
char * ptr = arr;
(*ptr)++;           // increments 'h' to 'i'
cout<<ptr<<endl;    // displays 'iello'

2 个答案:

答案 0 :(得分:3)

因为您正在尝试更改只读内存。即使这是一个C ++问题,也有一个C FAQ就足够了。

基本上,在说char *ptr = "hello"时,编译器可以自由地将“hello”置于只读状态 因此,尝试写入它是不安全的。

另一个C FAQ可能有用:

  

这些初始化之间有什么区别?

char a[] = "string literal";
char *p  = "string literal";

答案 1 :(得分:-1)

当你声明char * ptr =“hello”时; 这意味着ptr指向一个常量字符串

当你说ptr ++时, 您正在尝试更改不正确的基址