加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么我的char *可写,有时只能在C中读取

发布时间:2020-12-16 10:39:16 所属栏目:百科 来源:网络整理
导读:我最近很了解char *. 假设我做了一个递归函数来恢复char *但是根据我如何初始化它我得到了一些访问违规,并且在我的C入门中我没有找到任何给我正确的理解路径所以我正在寻求你的帮助. 情况1 在尝试交换字母时我遇到访问冲突的第一种情况: char * bob = "hell
我最近很了解char *.
假设我做了一个递归函数来恢复char *但是根据我如何初始化它我得到了一些访问违规,并且在我的C入门中我没有找到任何给我正确的理解路径所以我正在寻求你的帮助.

情况1
在尝试交换字母时我遇到访问冲突的第一种情况:

char * bob = "hello";

案例2然后我尝试了这个让它工作

char * bob = new char[5];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';

情况3但是当我做了一个cout时,我最后得到了一些随机的垃圾,所以我换了它

char * bob = new char[6];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';
bob[5] = '';

案例4那是有效的,所以我告诉自己为什么这不会起作用

char * bob = new char[6];
 bob = "hello";

情况5,它失败了,我也读过你可以做某事的地方

char* bob[];

然后添加一些东西.
我的问题是为什么有些失败而其他失败,最好的方法是什么?

解决方法

关键是这些指针中的一些指向分配的内存(读/写),其中一些指针指向字符串常量.字符串常量存储在与分配的内存不同的位置,并且不能更改.好吧大部分时间.系统中的漏洞通常是代码或常量被更改的结果,但这是另一个故事.

在任何情况下,关键是使用new关键字,这是在读/写内存中分配空间,因此您可以更改该内存.

这种说法是错误的

char * bob = new char[6];
bob = "hello";

因为您正在更改指针而不是复制数据.你想要的是这个:

char * bob = new char[6];
strcpy(bob,"hello");

要么

strncpy(bob,"hello",6);

你不需要这里的nul因为字符串常量“hello”将使编译器放置null.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读