以下是引用hiaod在2007-1-28 18:31:00的发言:
其实楼主的问题并不是编译器的问题,除了2楼指出的原因外,还有就是对指针定义的格式没有领会。
char a[]="abcde";
char *p=a; /* 这是合法的。 */
char *a="abcde";
char *p=a; /* 这也是合法的。 */
但如果用:
char *a="abcde";
char *p=*a;
却是非法的。
另外,3楼的说法:“1. 在上面的代码中,ca是一个字符数组,你可以对数组元素进行修改,而指针p指向一个字符串常量,它是不可修改的(如果对其修改,这种行为是未定义的);”也有不妥之处,指针指向的字符串常量也可以修改。
例如:
main()
{ char *p = "Welcomt to C";
*(p+2)='h';
puts(p);
}
显示的是:Wehcomt to C
那只是你的编译器允许了这种形为,并不代表别的编译器允许,因为语言标准没有定义这种行为,也就是说,各个编译器可以任意实现。比如,有的编译器会把该指针指向的字符串放在不可修改的代码段,此时运行就会发生段错误