Dog*_*Dog 3 c++ cstring access-violation
我char*最近明白了很多问题.假设我做了一个递归函数来恢复a char*但是根据我如何初始化它我得到了一些访问冲突,并且在我的C++入门中我没有发现任何给我正确的理解路径所以我正在寻求你的帮助.
案例1 在尝试交换字母时我遇到访问冲突的第一种情况:
char * bob = "hello";
Run Code Online (Sandbox Code Playgroud)
案例2然后我尝试了这个让它工作
char * bob = new char[5];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';
Run Code Online (Sandbox Code Playgroud)
情况3但是当我做了一个cout时,我最后得到了一些随机的垃圾,所以我换了它
char * bob = new char[6];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';
bob[5] = '\0';
Run Code Online (Sandbox Code Playgroud)
案例4那是有效的,所以我告诉自己为什么这不会起作用
char * bob = new char[6];
bob = "hello\0";
Run Code Online (Sandbox Code Playgroud)
情况5,它失败了,我也读过你可以做某事的地方
char* bob[];
Run Code Online (Sandbox Code Playgroud)
然后添加一些东西.我的问题是为什么有些失败而其他失败,最好的方法是什么?
Hog*_*gan 11
关键是这些指针中的一些指向分配的内存(读/写),其中一些指针指向字符串常量.字符串常量存储在与分配的内存不同的位置,并且不能更改.好吧大部分时间.系统中的漏洞通常是代码或常量被更改的结果,但这是另一个故事.
在任何情况下,关键是使用new关键字,这是在读/写内存中分配空间,因此您可以更改该内存.
这种说法是错误的
char * bob = new char[6];
bob = "hello\0";
Run Code Online (Sandbox Code Playgroud)
因为您正在更改指针而不是复制数据.你想要的是这个:
char * bob = new char[6];
strcpy(bob,"hello");
Run Code Online (Sandbox Code Playgroud)
要么
strncpy(bob,"hello",6);
Run Code Online (Sandbox Code Playgroud)
你不需要这里的nul,因为字符串常量"hello"将由编译器放置null.
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |