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

时间:2015-08-05 23:25:00

标签: c++

我正在尝试反转字符串(但这不是我的问题)。问题是尝试在给定某个索引的情况下更改字符串数组的值。但是,每次我尝试更改索引的值时,都会出现总线错误。即,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); 

}

2 个答案:

答案 0 :(得分:6)

将您的字符串分配为堆栈中的数组,而不是指向程序可能只读段的指针。

char str[] = "hello";

答案 1 :(得分:2)

首先,这条线至少应该给你一个警告:

char* str = "hello";

您正在将字符串常量转换为指针,这是不允许的。 要修复代码,您应该使用char str[] = "hello"中的main()

当您在reverse()中传递此数组时,它会衰减到char*,现在是您在之前的答案评论中提出的问题。

  

但是当我写cout&lt;&lt; str&lt;&lt; endl;,为什么打印出“你好”?它不应该只打印字符串的第一个字符,因为它指向数组的第一个元素吗?

这是因为<<上的std::cout运算符已超载。如果你给它一个char*const char*,它会将操作数视为指向C风格字符串(的第一个字符)的指针,并打印该字符串的内容:

const char * str= "hello";
cout << str; // prints "hello"

如果给它一个char值,它会将该值打印为一个字符:

cout << *str;   // prints "h"
cout << str[0]; // prints "h"