Chinaunix

标题: 更改字符串内容 [打印本页]

作者: tan1301230147    时间: 2014-05-26 17:23
标题: 更改字符串内容
char *i = 'Hhh';
char *str = i + “L”;
上面的表达式是错误的

不过如果写成这样
char buffer【20】;
char *i = ”Hhh“;
sprintf_s(buffer, 20, "%sL", i);
这样写虽然没问题,但需要命名一个变量用于存储 有没有什么好的方法可以不命名新的变量直接更改内容?
作者: su_787910081    时间: 2014-05-26 17:50
呵呵,楼主看来是知道代码的错误,但是不知道它为什么错误啊。不然你也不会发出这样的疑问啊。

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


    谢了 懂了
作者: sxcong    时间: 2014-05-29 17:21
char i[] = "Hhh";
i[4] = 'L';
i[5]='\0';

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

作者: tan1301230147    时间: 2014-05-30 15:46
回复 4# sxcong


    这样 添加一个字符组要写循环 太麻烦了
作者: sxcong    时间: 2014-05-31 09:20
回复 5# tan1301230147


sprintf, snprintf, strcat都可以合并字符串。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2