第1个回答 2010-08-29
这样的的话 不会提示你语法错误,
但是 执行错误
因为
指针p指向了"asdfdfsfdsf“的内存空间,这个空间 是内存常量,是不可写的。
如果是这样就不会错了
char p[]="asdfdfsfdsf"; strcpy(p,"abcd")
char p[],的目的是开辟数组空间,赋值为'a’ 's' 'd' 'f' .....;
第2个回答 2010-08-29
先要给p开辟空间,然后才能用strcpy函数;
char *p = (char *)calloc(1, 32);
strcpy(p,"abcd");
如果使用malloc,别忘了p的末尾给它赋NULL
第3个回答 2010-08-29
看看你那本书的年代,这是老式语法了,在 K&R C 中,对 string literal 的修改是未定义的,因此当年的部分编译器允许类似这样的语法,如 LCC V3.6等。
而在 ANSI C 中,这种做法已被明令禁止,因此现在的大多数编译器干脆就把 string literal 放在只读内存,故这种对只读内存的写操作会出错(一般是执行出错)。
第4个回答 2010-08-29
这是典型的溢出问题,你要注意,指针只有四个字节,你要注意,你那个是字符串,占5个字节,所以溢出,不能直接赋值.