0
#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」が表示されます

私は何を間違っていますか?

4

2 に答える 2

1

ループ条件で間違ったことをチェックしています。をチェックする必要があり*sます。sポインター0であり、コード内ではほとんどなりません。最終的に、マップされていないメモリ領域に足を踏み入れると、SIGBUS.

于 2013-11-15T23:30:32.187 に答える
1

startstring literal暗黙のうちconstに変更すると、未定義の動作が呼び出されます。試す:

char start[] = "There are no";

または単に文字列を使用します:

std::string start("There are no");
于 2013-11-15T23:30:05.463 に答える