| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 345 人关注过本帖
标题:指针修改字符串的问题
只看楼主 加入收藏
snowy_way
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-12-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
指针修改字符串的问题
程序代码:
#include<stdio.h>
int main()
{
        char *ptr = "ABC";
        printf("%c\n",ptr[0]);
        return 0;
}
我想用只用指针将B改成D,应该怎么写?*(ptr++) = 'D'和ptr[1] = 'D'
都不行,在linux下编译显示段错误
搜索更多相关主题的帖子: 字符串 color 
2012-12-27 14:56
snowy_way
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-12-5
收藏
得分:0 
大家帮帮忙吧
2012-12-27 15:06
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:20 
这个以前的帖子说过,指针指向的常量,是不能被修改的
2012-12-27 15:15
snowy_way
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-12-5
收藏
得分:0 
回复 3楼 jk_love
哦,原来如此,谢谢了
2012-12-27 15:18
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    char *ptr = "ABC";
    //不可以修改,因为这里的字符串"ABC"是常量, 常量是不可以被修改的
    //只有变量才可以修改
    //ptr[1] = 'D'; 

    //比如 int i = 5; i 是变量, i除了可以被赋值为5,还是被赋值其他值.
    //而5就是常量,是不可以被改的

    //若要修改,以下代码
    char szStr[] = {"ABC"};

    char *ptr1 = szStr;

    printf("%c\n",ptr1[0]);
   
    ptr1[1] = 'D';

    return 0;
}
2012-12-27 15:24
beyondioi
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:5
专家分:15
注 册:2012-12-31
收藏
得分:0 
回复 5楼 crystall
怎么不可以修改呢?答案是:可以修改。
char *ptr = "ABC";            //这样定义随便修改
const char *ptr = "ABC";      //这样定义才不能修改该指针指向的对象
如果真像3楼所说的“指针指向的常量,是不能被修改的 ”,那所报的错误应该是类型不匹配,而非段错误。至于为什么会出现楼主所看到的段错误,应该是指针没有分配内存的原因。如果将楼主的程序改成:char ptr[] = "ABC";  这样就不会有段错误了。

还有,段错误应该不是在编译的时候产生的,而是在执行的时候产生的。
///////////////////////////////////////////////////////////
    char *ptr = "ABC";
     //不可以修改,因为这里的字符串"ABC"是常量, 常量是不可以被修改的
     //只有变量才可以修改
     //ptr[1] = 'D';
以上真是胡说八道,我们能否修改内存某个地址的值,是看该地址的属性而不是该地址里存储的内容, char *就是该地址的属性,"ABC"是该地址里存储的内容。按照上述说的,该地址里存储的"ABC"是常量,则不能修改,那试问,内存里哪个地方存储的不是常量?
是不是常量不是由"ABC"决定的,而是由char *决定的,char *决定ptr指向的内存所存储的不是常量,const char *决定ptr指向的内存所存储的是常量。
收到的鲜花
  • tangrongyang2013-01-05 12:51 送鲜花  2朵   附言:我很赞同

懦夫畏死终须死, 志士求仁几得仁?
2012-12-31 16:35
beyondioi
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:5
专家分:15
注 册:2012-12-31
收藏
得分:0 
回复 5楼 crystall
版主的C语言之烂,可见一斑。

懦夫畏死终须死, 志士求仁几得仁?
2012-12-31 16:42
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
帮crystall姐说句话,支持一下


[fly]存在即是合理[/fly]
2012-12-31 16:46
快速回复:指针修改字符串的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019126 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved