学习c语言遇到的问题

同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务


}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

这就涉及到指针和数组的区别了char *str1 = "angry,";的意义是声明一个char类型指针str1, 将其指向一个字符串常量"angry, "既然是常量,那么对其的任何修改都是非法的所以会报错;
而char str1[] = "angry,";则是声明了一個char类型数组大小为"angry,"字符串长度+1(因为末尾要留位置给结束符),并初始化为"angry",这个数组并不是常量数组因此可以进行修改,编译器沒有报错
但不报错并不代表不会出问题,使用strcat的前提是目标写入数组要有足够空间容纳源数组的内容如果空间不足则会发生数组越界。数组越界这种事情有很大的随机性,有可能会导致程序崩溃也有可能只是导致程序其它变量被莫名其妙地修改,总之这种情况要尽量避免吧

0

你这样想好了,双引號里的字符串相当于是常量你用strcat函数试图修改常量,是想搞个大新闻吗

你的第二个例子相当于定义了变量,以数组形式当然可以修妀,但是数组是有长度限制的你那样初始化会被编译器自动钦定为字符串的长度+1,.没有s(滑稽
因为字符串结尾有个'\0'

长度限定了之后,你继續往后添加字符是不按照基本法的因为那些区域是随机的,你并不能往里写东西不然程序会有问题,虽然没表现出来

总结:你的问题囿二1、试图修改常量 2、数组越界

0

你可以试着修改str1的值,也会报错滴

0

0

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信