中易网

C语言,用指针方式定义的字符串为什么不能修改?

答案:4  悬赏:0  
解决时间 2021-03-02 18:32
char * p = "123";*p = '0';//这样会出错我并没有用const啊
最佳答案
"123"本身默认的就是一个字符串常量,他的值不容修改,p只是一个指针,执行该字符串的首地址,对该地址的值指向的地址空间的值的改变也是不允许的。
全部回答
我的天啊! char * p = "123";这是字符串类型的 然而 *p = '0';//这样会出错 你直接负一个字符给他,当然报错
我也是今天在想这个声明模式跟char p [ ]="123";之间的区别时琢磨的。二维数组int a [ i ] [ j ],当把二维数组看成一维数组时声明指针变量是这样声明的:int *p=a[ i ],这个时候p指向的是元素类型为int型的一维数组的第一个元素;当以指针方式定义字符串的时候,同样的道理,指针p指向的是元素类型为字符数组的数组(大致如:a[ 0 ][ 0 ]={{123}},p=a[ 0 ]),此时p指向元素“123”的第一个元素‘ 1 ’。当以*p=‘0’这种方式赋值的时候相当于把char类型的值赋值给数组类型的变量!不知道说的够不够明白,第一次回答问题;碰巧我也在研究这个问题,搜了之后点进来发现你的问题跟我一样。只是自己的一点未经别人证实的想法。但至少让我不在这个问题上纠结。。。
c语言是比较低级的语言,没有字符串概念,只有字符数组,不能自动分配空间,要存放数据,必须预先定义存储空间的大小! 改为:char name[100]; 一定要常量 scanf("%d%s",&a[i].nu,a[i].name); 就没问题了! 估计你曾经看过这种定义法:char *name="abcd";这种也是字符数组初始化固定的空间4个,所以你要记住,初始化一定要预定存放的空间大小! 还有你想达到高级语言的效果,你也可以用 a[i].name = (char *)malloc(100); scanf("%d%s",&a[i].nu,a[i].name); 就没问题了!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中国邮政(龙村邮政支局)地址有知道的么?有点
我希望能够靠近你 英语怎么说
艺豪装饰(泰祥路)怎么去啊,有知道地址的么
斗战神猴子副手是什么,怎么获得猴子副手武器
哈士奇好还是拉布拉多好养
孩子做题总是不细心马虎怎么办
任务栏无法自动隐藏怎么办?
东方太和灸养生馆太和旗舰店这个地址在什么地
为什么百度贴吧进不去了?说是“该网页无法访
珠海保税区丽珠合成制药有限公司怎么样
鑫宝达汽车服务中心地址在哪,我要去那里办事
钢琴整体止不住音怎么办
三星S7手机电池耐用吗?
举报在银行工作的领导,怎么办!!!
我能跟我姐夫的妹妹结婚吗
推荐资讯
圣都宾馆在什么地方啊,我要过去处理事情
鸿茂商行地址在哪,我要去那里办事
竞选活力好少年发言稿
瑞福祥窗帘棉布店我想知道这个在什么地方
谁知道video-one这个国外视频网站怎么才可以
倩女幽魂的白骨令咋使用啊?!我右键点了无数
华安小区在哪里啊,我有事要去这个地方
无线路由器问题,上网速度很不稳定,求解决,
我家有块宅基地,长25米,宽17米。面积怎么算
广东省摄影家协会怎么去啊,有知道地址的么
樱之味我想知道这个在什么地方
龙窝中心卫生院-综合大楼地址有知道的么?有
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?