用strcpy字符串赋值给指针:比如 char *p="asdfdfsfdsf"; p=strcpy(p,"abcd")

原题是这样的:char*p="asfdsfds";p=p+3;printf("%d\n",strlen(strcpy(p,"abcd")));我试了也是编译错误,但书上居... 原题是这样的:
char *p="asfdsfds";
p=p+3;
printf("%d\n",strlen(strcpy(p,"abcd")));
我试了也是编译错误,但书上居然有答案,解释一下,行吗
展开
 我来答
我自己的神话i
2010-09-07 · 超过12用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:34.6万
展开全部
我在tc2.0上面运行时没有错误的,但是还是有几个地方要注意一下strcpy函数的第一个参数要有足够的空间。因为strcpy函数是将字符串复制到第一个参数里面的。如果这里没有错误的话程序运行时能够通过的。那么可以先看一下p的空间是否足够。由于第一条语句char *p="asfdsfds"这里就相当于将p的空间开辟了8个字节,然后第二条语句是使p指向第三个字符处,那么p最后的空间还有6个字节,而strlen的第二个参数只有4个字节当然就不会出现错误了。
一楼所说的char *p="asfdsfds"是定义的常量是不正确的,常量的定义必须加关键字const,这里只是赋初值那么内存数据自然也可以改变了。
我想你运行没有通过时在vc6.0里面吧,我也试过了确实是通不过的。那是因为
vc里面对c语法的限制多一点,可能要明确指出p的大小才行(如定义成数组的形式)因为我很少用vc写程序,不过编译时没有问题的。
amote258
2010-08-29 · TA获得超过1965个赞
知道小有建树答主
回答量:1101
采纳率:0%
帮助的人:951万
展开全部
这样的的话 不会提示你语法错误,
但是 执行错误
因为
指针p指向了"asdfdfsfdsf“的内存空间,这个空间 是内存常量,是不可写的。

如果是这样就不会错了
char p[]="asdfdfsfdsf"; strcpy(p,"abcd")
char p[],的目的是开辟数组空间,赋值为'a’ 's' 'd' 'f' .....;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alberte_peng
2010-08-29 · TA获得超过132个赞
知道小有建树答主
回答量:222
采纳率:50%
帮助的人:106万
展开全部
先要给p开辟空间,然后才能用strcpy函数;

char *p = (char *)calloc(1, 32);
strcpy(p,"abcd");

如果使用malloc,别忘了p的末尾给它赋NULL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
難得當歌對酒時
2010-08-29 · TA获得超过1187个赞
知道小有建树答主
回答量:517
采纳率:100%
帮助的人:827万
展开全部
看看你那本书的年代,这是老式语法了,在 K&R C 中,对 string literal 的修改是未定义的,因此当年的部分编译器允许类似这样的语法,如 LCC V3.6等。
而在 ANSI C 中,这种做法已被明令禁止,因此现在的大多数编译器干脆就把 string literal 放在只读内存,故这种对只读内存的写操作会出错(一般是执行出错)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ganpengjin
2010-08-29 · TA获得超过115个赞
知道答主
回答量:279
采纳率:0%
帮助的人:185万
展开全部
这是典型的溢出问题,你要注意,指针只有四个字节,你要注意,你那个是字符串,占5个字节,所以溢出,不能直接赋值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式