试图反转字符串并获得总线错误

Trying to reverse a string and getting a bus error

本文关键字:总线 错误 串并 字符串 字符      更新时间:2023-10-16

我试图反转一个字符串(但这不是我的问题)。这个问题是试图改变给定某个索引的字符串数组的值。但是,每次尝试更改索引处的值时,都会得到一个总线错误。即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"