strcpy引发的疑问(一)

A:
char *p1; //成功
char p2[20];
p1 = "String A";
strcpy(p2,p1);

b:
char *p1; //出错
char *p2;
p1 = "String A";
strcpy(p2,p1);

是因为没给p2分配内存空间吗?不能动态自动分配吗?
如果是的话,怎么写面子和样也不能成功呢?
c: //出错
char *p1;
char *p2;
p1 = "String A";
p2 = "String B";
strcpy(p2,p1);
printf("%s/n",p1);
printf("%s/n",p2);
请帮我分析一下错误的原因吧,弄的很糊涂
谢谢
---------------------------------------------------------------

strcpy( char* dest, char* source);
//将source字符串拷贝之dest中,dest需要>=source字符串空间才可以
b:
char *p1; //出错
char *p2;
p1 = "String A";
strcpy(p2,p1); 。//p2无空间出错

//后面p3 = "赋值"; 之后没错是开辟了空间 但是const常量p3指向空间是不可改变其内容的
//所以你企图改变就报错
---------------------------------------------------------------

你对b的理解正确,不会自动分配的。p2是野指针。

---------------------------------------------------------------

其实strcpy不会对空间是否分配进行判断。
其实,楼主程序出错的原因都是地址空间内的值能否被改变的问题。
b:
因为char *p2;未初始化,所以他指向的地址一般是无效的,而且很多情况是指向系统区,你不能去改变它指向的值。
c:
就是楼上所说的道理了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值