Ошибка шины c ++: 10 при попытке разобрать и обновить строку

#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»

Что я делаю неправильно?

0

Решение

Вы проверяете на предмет неправильной вещи в условии цикла. Вы должны проверить *s, s это указатель и вряд ли когда-нибудь станет 0 в вашем коде. В конечном счете, вы вступаете в не отображенную область памяти, которая вызывает SIGBUS,

1

Другие решения

start является string literal, это неявно constизменить его вызовет неопределенное поведение. пытаться:

char start[] = "There are no";

или просто используйте строку:

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

По вопросам рекламы [email protected]