C程序题,帮帮忙啊!若有定义:char *x="abcdefghi";以下选项中正确运用了strcpy函数的是

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:02:17
A、char y[10];strcpy(y,x[4]);
B、char y[10];strcpy(++y,&x[1]);
C、char y[10],*s;strcpy(s=y+5,x);
D、char y[10],*s;strcpy(s=y+1,x+1);

改选哪个呢?麻烦给出清晰的解释。

A、char y[10];strcpy(y,x[4]); //第二个参数应该是个指针
B、char y[10];strcpy(++y,&x[1]); //越界了吧
C、char y[10],*s;strcpy(s=y+5,x); //赋值后已经越界了
D、char y[10],*s;strcpy(s=y+1,x+1); //正确

可能如此

正是如此!

和1楼的有点不同
A,B与C,D的差别在于
A,B改变了y的值
不知道你记得不记得,书本上有句话,数组的数组名是常量,试问,常量怎么能对他们赋值呢?
显然,A和B都改变了y的值。
这一类排除,然后考虑C,D
很明显吸取了A,B的教训,定义了一个变量,然后接收常量的值加以改变,这就没有问题了
C就越界了,从y以后的5个单元加abcdefghi,显然超过10。
答案就出来啦
选D

strcpy函数原型是char* strcpy(char* strDest,const char* strSrc);
选项A,第二个参数是一个字符e,所以不对。
选项B,y代表数组y[10]的首地址,是一个常数,不能对其进行操作;不正确。
选项C和D,应该说都是正确的,因为第一个参数只需要传个地址就可以了,但是数组y没有被初始化,如果要输出就会有脏数据存在。