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

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

概述我最近很了解char *. 假设我做了一个递归函数来恢复char *但是根据我如何初始化它我得到了一些访问违规,并且在我的C入门中我没有找到任何给我正确的理解路径所以我正在寻求你的帮助. 情况1 在尝试交换字母时我遇到访问冲突的第一种情况: char * bob = "hello"; 案例2然后我尝试了这个让它工作 char * bob = new char[5];bob[0] = 'h';b 我最近很了解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] = '
char * bob = new char[6]; bob = "hello
char* bob[];
";
';

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

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

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

strncpy(bob,"hello",6);

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

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

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

这种说法是错误的

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

要么

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

总结

以上是内存溢出为你收集整理的为什么我的char *可写,有时只能在C中读取全部内容,希望文章能够帮你解决为什么我的char *可写,有时只能在C中读取所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1221797.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存