/********错误程序********/
void key(char *p)
{
p="ac";
}
int main()
{
char *p="d";
cout<<p<<endl;
key(p);
cout<<p<<endl;
delete p;
}
//该程序只输出 "d"
/***********************/
/*******正确程序*******/
void key(char *p)
{
strcpy(p,"ac");
}
int main()
{
char *p=new char[5];
strcpy(p,"e");
cout<<p<<endl;
key(p);
cout<<p<<endl;
delete[] p;
}
先输出 "e",再输出"ac"
/**********************/
==================================
第一个程序:
char *p="d";//p指向常量字符串
cout<<p<<endl;
key(char *p) //试图改变p,语法无误,但逻辑不允许,故编译正确,运行错误。在程序编译的时候; void key(char *p)类似被解释成:void key(const char *p){p="ac";}
第二个程序:
char *p = new char[100];//p指向数组的首地址,内容可变
strcpy(p, "d");//内容变为“d”
cout<<p<<endl;
key(p);//内容变为“ac”,strcpy()不改变它的地址,只改变p所指的数组的内容,故输出为ac
C风格字串不支持直接赋值,要使用strcpy()。