免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1489 | 回复: 7
打印 上一主题 下一主题

这个程序对吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-01 08:45 |只看该作者 |倒序浏览
本帖最后由 hongshaohu 于 2012-06-01 08:55 编辑

第一个:
#include <stdio.h>

int main(void)  {
    char *p1 = "hello";
    p1[0] = 'H';
    printf("%s\n", p1);

    return 0;
}


第二个:
#include <stdio.h>

int main(void)  {
    char c[] = "hell";
    char *p2 = c;
    p2[0] = 'H';
    printf("%s\n", p2);

    return 0;
}

第一个程序对吗?和第二个有什么不同?why?

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
2 [报告]
发表于 2012-06-01 08:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2012-06-01 09:55 |只看该作者
char *p1 = "hello";
这一句是错的,导致你后面那一句 p1[0] = 'H'; crash。
写程序最好不要有 warning

论坛徽章:
0
4 [报告]
发表于 2012-06-01 10:22 |只看该作者
第一个不对,字符串常量"hello“被存放在rodata段,只读,不能修改。
第二个对的,数组在栈区内存中开辟了空间存放字符串,可被修改。

论坛徽章:
0
5 [报告]
发表于 2012-06-01 11:17 |只看该作者
char *p1 = "hello";
p1指向了一段常量存储空间,而常量是不允许改变的,故p1[0]='H';会出错。

char c[] = "hello";
是为c分配了一段内存空间
char* p2 = c;是将指针p2指向了内存空间,所以其能够改变内容

论坛徽章:
0
6 [报告]
发表于 2012-06-01 11:20 |只看该作者
严格地说应该这么写:const char *p1 = "hello";
这样的话,错误就一目了然了。

像这么写  char *p1 = "hello";
应该算是c语法不严谨的一个地方。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
7 [报告]
发表于 2012-06-01 11:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2012-06-01 12:56 |只看该作者
嗯 学习了                       
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP