строка — C ++ Невозможно сравнить указатель на разыменованный символ с символом

У меня есть входная строка, и я хочу узнать, сколько пробелов в строке.

Вот мой код

// input string
std::string str = "abc d e f";

// convert string to cstring
char* cstr = new char[str.length()+1];
std::strcpy(cstr, str.c_str());

// iterate through the cstring and count how many spaces are there
int num_of_spaces = 0;
char* ptr = cstr;

while (ptr) {
if (*ptr == ' ') {
++num_of_spaces;
}
++ptr;
}

Тем не менее, я получил сообщение об ошибке на if (*ptr == ' ') строка, которая говорит: Thread 1: EXC_BAD_ACCESS (code = 1, address=0x100200000)

не *ptr значение типа char, потому что ptr это char* указатель, и я разыменовал его *ptr, Если так, то почему сравнение не верно?

-1

Решение

Ты не хочешь while (ptr), ты хочешь while (*ptr)в то время как вещь ptr указывает на не нулевой символ, который отмечает конец строки в стиле C.

5

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


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