首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一个令人头疼的指针问题!!!!
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 10:45:03 楼主
    #include <stdio.h>
    #include <stdlib.h>

    main()
    {

    char s1[10]="mystring";;
    char *s2;

    s2=s1;
    printf("%s\n",s1);
    printf("%s\n",s2);

    s2[2]='k';
    printf("%s\n",s1);
    printf("%s\n",s2);


    char *t1;
    t1=(char *)malloc(sizeof(char)*10);
    t1="mystring";
    char *t2;


    t2=t1;
    printf("%s\n",t1);
    printf("%s\n",t2);

    t2[2]='k';
    printf("%s\n",t1);
    printf("%s\n",t2);

    }


    结果:
    mystring
    mystring
    myktring
    myktring
    mystring
    mystring
    Segmentation fault
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 10:47:391楼 得分:0
    char *t1;
    t1=(char *)malloc(sizeof(char)*10);
    t1="mystring";
    char *t2;

    这样的话, t1分配的内存泄漏了, 应该用strcpy(t1, "mystring")
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 10:50:012楼 得分:0
    至于Segmentation fault 的原因, 是因为
    t1 = "mystring";
    t2 = t1;
    t2[2] = k;

    "mystring"是一个常量字符串, 不可以修改, 所以出现非法内存访问了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 10:56:273楼 得分:0
    t2[2]='k';
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:14:524楼 得分:0
    对于S1和S2,S2[2]='k'是将数组S1中的内容改为'k'.
    对于t1和t2都是字符常量的地址,t2[2]='k'试图修改一个字符常量,因此是错误的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:21:115楼 得分:0
    支持2楼
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:21:186楼 得分:0
    一个分配的内存空间在栈空间中,一个位于常量区
    所以s2[k]='k'可以赋值
    而t2[k]='k'就不可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:30:497楼 得分:0
    引用 6 楼 billy1985 的回复:
    一个分配的内存空间在栈空间中,一个位于常量区
    所以s2[k]='k'可以赋值
    而t2[k]='k'就不可以


    是栈空间吗?不是堆空间吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-19 11:32:158楼 得分:0
    124楼好详尽..顶起.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved