C语言,用指针方式定义的字符串为什么不能修改?
答案:4 悬赏:0
解决时间 2021-03-02 18:32
- 提问者网友:梧桐不渝
- 2021-03-01 19:56
char * p = "123";*p = '0';//这样会出错我并没有用const啊
最佳答案
- 二级知识专家网友:开心就好
- 2021-03-01 21:10
"123"本身默认的就是一个字符串常量,他的值不容修改,p只是一个指针,执行该字符串的首地址,对该地址的值指向的地址空间的值的改变也是不允许的。
全部回答
- 1楼网友:woshuo
- 2021-03-01 23:25
我的天啊!
char * p = "123";这是字符串类型的
然而
*p = '0';//这样会出错
你直接负一个字符给他,当然报错
- 2楼网友:厌今念往
- 2021-03-01 22:38
我也是今天在想这个声明模式跟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类型的值赋值给数组类型的变量!不知道说的够不够明白,第一次回答问题;碰巧我也在研究这个问题,搜了之后点进来发现你的问题跟我一样。只是自己的一点未经别人证实的想法。但至少让我不在这个问题上纠结。。。
- 3楼网友:走,耍流氓去
- 2021-03-01 21:54
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); 就没问题了!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |