c ++总线错误:10尝试解析和更新字符串时

时间:2013-11-15 23:27:49

标签: c++ bus-error

#include<stdio.h>
#include<ctype.h>

int main() {

  char* start = "There are no";
  char* d = start;
  char* s = d;

  while (s) {
    char c = *s++;
    if (ispunct(c) || isspace(c)) {
      continue;
    }
    *d++ = c;
  }

  printf("%s\n", start);

}

我是c / c ++的新手并试图理解操纵字符串。上面的代码扫描字符串并跳过标点和空格并打印字符串,没有任何标点符号和空格。

当我运行它时,我得到“总线错误:10”

我做错了什么?

2 个答案:

答案 0 :(得分:1)

startstring literal,隐含const,修改它会调用未定义的行为。尝试:

char start[] = "There are no";

或只使用字符串:

std::string start("There are no");

答案 1 :(得分:1)

您正在检查循环条件中的错误。您应该检查*ss是一个指针,它几乎不会成为代码中的0。最终,您进入未映射的内存区域,导致SIGBUS