免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: rock_jq
打印 上一主题 下一主题

老问题,字符串指针 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-04-25 10:41 |只看该作者
#include <stdio.h>

main()
{
    char *str = "hello";

    printf("[%d][%s]\n",strlen(str),str);

    strcpy(str,"123456789");
    printf("[%d][%s]\n",strlen(str),str);
}
我推测,你的程序运行会core dump
str 存放在栈里面的,他指向rodata中的“hello”的首地址,你往rodata写数据,当然不正确。

论坛徽章:
0
12 [报告]
发表于 2008-04-25 22:06 |只看该作者
原帖由 flw 于 2008-4-24 18:45 发表
错误的程序未必一定会得到错误的结果。

是这样的,我现在问的是
char str[]="hello";
const char * ptr = str;
char const * const ptr = str;

/*
   通过*ptr 或者ptr[0]均不能该ptr指向的内容
   为什么strcpy(ptr,"123");又可以呢
*/

论坛徽章:
0
13 [报告]
发表于 2008-04-26 01:15 |只看该作者
原帖由 rock_jq 于 2008-4-24 20:49 发表
受益!借着这贴再问个问题
const char * ptr = "HELLO";       /* --1-- */
char const * const ptr = "HELLO"; /* --2-- */

/*
   通过*ptr 或者ptr[0]均不能该ptr指向的内容
   为什么strcpy(ptr, ...



strcpy(ptr,"123")调用char *strcpy(char *dest, const char *src)函数后,ptr前面的const限定词已经被丢弃掉了(gcc编译会warning),新定义的形参放在stack区域,该函数里面data存放在可写区域(maybe),函数里面是可以进行操作的,最后只是return指针dest,并没有改变实参的值、地址。

[ 本帖最后由 javierchen 于 2008-4-26 04:11 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP