-6

除了主要方法之外的所有内容都是我的教授写的,所以应该可以。作为参考,我很确定这段代码应该从字符串中删除任何重复的字母,将“blaahhhblah”变成“blahblah”。此代码编译时没有错误或警告(根据 1999 标准编译),但是当我运行它时会出现段错误,我不知道为什么。我觉得这可能有一个明显的答案,但是我们没有为这门课程使用一本书,而且教授的教学也不是很好,所以我迷路了。

void g(char* a) {
  char* b = a;
  while(*b) {
    while(*a == *b)
      b++;
    a++;
    a* = b*;
  }
}

int main() {
  char* x = "blaahhhblah";
  g(x);
}
4

2 回答 2

3

问题就在这里。

a* = b*;  

将此更改为a = bor *a = *b(取决于您要执行的操作,指针分配或指针指向的变量的分配)。

char* x = "blaahhhblah";  

应该

char x[] = "blaahhhblah";
于 2013-10-02T19:01:15.830 回答
1

g假定它传递的字符串是可变字符串。您的编译器(像大多数编译器一样)使文字字符串不可变。您正在传递g一个指向不可变字符串的指针。要解决此问题,您可以使用使用文字初始化的数组,而不是文字char*。所以:

int main() {
  char x[] = "blaahhhblah";
  g(x);
}
于 2013-10-02T19:00:38.317 回答