同学,你对字符串、字符串常量、字符数组、c++的内存模型了解不到位。
你在main()中第一行:char *p = "I am a student.";
声明了一个指针p,指向一个字符串常量"I am a student."。所谓常量,就是不能改变的量,其存在内存中的常量区,而你下面的代码中试图改变这个常量的值(试图进行字符交换)。所以运行时异常。
把main()中第一行:char *p = "I am a student.";
改为:char[ ] p = "I am a student."; 试试。
这样p就是一个字符数组形式的字符串了,其存储在内存的栈空间,是可以改变的,当然不能超出其长度。