请教有关指针问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 07:56:43
若 char a[]="abcd";
char *p="ABCD";
为什么只能strcpy(a,p);
而strcpy(p,a);是错误的
是否用指针变量作为函数strcpy,strcat,strcmp的实参时,指针变量只能放在函数的参数2位置,而参数1的地方只能放数组地址?
另外若strcpy(p,a)是错误的话,为什么下面的题目选C?B也应该是错的
1.若有语句:char s1[]="string",s2[8],*s3,*s4="string2"; 则对库函数strcpy的错误调用是
(A) strcpy(s1,"string2");
(B) strcpy(s4,"string1");
(C) strcpy(s3,"string1");
(D) strcpy(s1,s2);

char *p="ABCD"; 指向常量,不可修改。
char a[]="abcd"; 变量

#include <stdio.h>
#include <string.h>
void main()
{
char s1[]="string",s2[8],*s3,*s4="string2";
strcpy(s1,"string2");
strcpy(s4,"string1");
strcpy(s3,"string1");
strcpy(s1,s2);
}
只有A是对的。严格的说A也不对,strcpy(s1,"string2"); strcpy 会在字符串后面加'\0',其实已经越界了。

因为不与需修改常量字串.

这是规定!

因为p所指向的内存是在编译时就确定了的,不能改写