免费注册 查看新帖 |

Chinaunix

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

[C++] 更改字符串内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-26 17:23 |只看该作者 |倒序浏览
char *i = 'Hhh';
char *str = i + “L”;
上面的表达式是错误的

不过如果写成这样
char buffer【20】;
char *i = ”Hhh“;
sprintf_s(buffer, 20, "%sL", i);
这样写虽然没问题,但需要命名一个变量用于存储 有没有什么好的方法可以不命名新的变量直接更改内容?

论坛徽章:
0
2 [报告]
发表于 2014-05-26 17:50 |只看该作者
呵呵,楼主看来是知道代码的错误,但是不知道它为什么错误啊。不然你也不会发出这样的疑问啊。

其实指针它只是一个变量而以,在内存中有4 个字节的内存空间可以使用,但是这4个字节只是用来存放指针变量值的,也就是一个无符号整数。
而数组在内存中是一片连续的空间,可以存放该数组声明个数的该类型的值。
楼主想改字符串内容,其实际就是修改内存中指定位置(内存地址)处的值,在楼主你所给出的命题中,char *i = "Hhh";这里面的"Hhh"是一个常量指针,这一句其实做的动作是把"Hhh"在内存中的地址(更确切的说是字符'H'的内存地址)赋值给了变量i,但"Hhh"这个字符串在内存中的地址是一个只读的地址,所以不可以被更改(写),所以要修改一个字符串,必须要有一片足够长的内存空间才可以。否则将会出现错误。

论坛徽章:
0
3 [报告]
发表于 2014-05-27 10:10 |只看该作者
回复 2# su_787910081


    谢了 懂了

论坛徽章:
0
4 [报告]
发表于 2014-05-29 17:21 |只看该作者
char i[] = "Hhh";
i[4] = 'L';
i[5]='\0';

这样可以,不过会有安全隐患,绝对不建议这么用。一开始应该把数组定义的长一些。

论坛徽章:
0
5 [报告]
发表于 2014-05-30 15:46 |只看该作者
回复 4# sxcong


    这样 添加一个字符组要写循环 太麻烦了

论坛徽章:
0
6 [报告]
发表于 2014-05-31 09:20 |只看该作者
回复 5# tan1301230147


sprintf, snprintf, strcat都可以合并字符串。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP