#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»
Что я делаю неправильно?
Вы проверяете на предмет неправильной вещи в условии цикла. Вы должны проверить *s
, s
это указатель и вряд ли когда-нибудь станет 0
в вашем коде. В конечном счете, вы вступаете в не отображенную область памяти, которая вызывает SIGBUS
,
start
является string literal
, это неявно const
изменить его вызовет неопределенное поведение. пытаться:
char start[] = "There are no";
или просто используйте строку:
std::string start("There are no");