试图反转字符串并获得总线错误
Trying to reverse a string and getting a bus error
我试图反转一个字符串(但这不是我的问题)。这个问题是试图改变给定某个索引的字符串数组的值。但是,每次尝试更改索引处的值时,都会得到一个总线错误。即Bus error: 10
。我不确定这是什么意思。此外,我尝试了str[0] = "a"
,但这也给了我一个总线错误。有什么建议来解决这个问题吗?
#include <iostream>
using namespace std;
void reverse(char* str){
str[0] = 'a';
}
int main(){
char* str = "hello";
reverse(str);
}
将字符串分配为堆栈上的数组,而不是作为指向程序中可能的只读段的指针。
char str[] = "hello";
首先,这一行至少应该给您一个警告:
char* str = "hello";
将字符串常量转换为指针,这是不允许的。要修复你的代码,你应该在main()
中使用char str[] = "hello"
。
当你在reverse()
中传递这个数组时,它衰减到char*
,现在是你在前面的回答评论中问的问题。
但是当我写count <<str & lt; & lt;,为什么输出"hello"?它不应该只打印字符串的第一个字符吗,因为它指向数组的第一个元素?
这是因为std::cout
上的<<
操作符重载了。如果给它一个char*
或const char*
,它将操作数视为指向c风格字符串的(第一个字符)的指针,并打印该字符串的内容:
const char * str= "hello";
cout << str; // prints "hello"
如果你给它一个字符值,它会将该值打印为字符:
cout << *str; // prints "h"
cout << str[0]; // prints "h"
相关文章:
- 总线错误,堆上分配的内存
- 总线错误 10 - 字符 * 数组
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- 获取总线错误:10 并附加字符串
- 多维矢量总线错误
- 链表的总线错误(核心转储)
- C 结构中的总线错误
- 如何解决此总线错误
- 调用虚拟方法导致总线错误
- 尝试打印数组时出现总线错误和奇怪的输出
- 尝试在共享内存中写入时发生总线错误
- C++ 总线错误:尝试解析和更新字符串时出现 10
- 我在以下代码中收到总线错误
- 总线错误:10 还有更多索引要去
- 使用链表的动态队列//总线错误:10(C++)
- 快速修复程序给出的总线错误
- 总线错误10或分段错误11
- C++ 在类成员"无符号长"上使用"^="和"<<"时出现总线错误
- 析构函数中的模拟总线错误
- 试图获取vector迭代器的值时出现总线错误10