【问题标题】:Trying to reverse a string and getting a bus error试图反转字符串并出现总线错误
【发布时间】:2015-08-05 23:24:59
【问题描述】:

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

}

【问题讨论】:

标签: c++


【解决方案1】:

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

char str[] = "hello";

【讨论】:

  • 我有一个问题,void reverse(char* str){},我是在传递指针还是 * 充当引用?
  • 在 C++ 中,数组在某些上下文中“衰减”为指针。在这里,reverse 的指针参数以指向 main 中数组第一个元素的指针开始。
  • 但是当我写 cout
  • reversestr的类型是指向char的指针,std::cout将其视为字符串。相比之下,普通的char 是单个字符。
【解决方案2】:

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

char* str = "hello";

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

当你在reverse() 中传递这个数组时,它会衰减到char*,现在是你在上一个答案的评论中提出的问题。

但是当我写 cout

这是因为std::cout 上的&lt;&lt; 运算符过载。如果给它一个char*const char*,它会将操作数视为指向C 样式字符串(的第一个字符)的指针,并打印该字符串的内容:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2022-09-22
    • 2013-04-17
    • 1970-01-01
    • 2014-01-30
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多