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