У меня есть входная строка, и я хочу узнать, сколько пробелов в строке.
Вот мой код
// 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
, Если так, то почему сравнение не верно?
Ты не хочешь while (ptr)
, ты хочешь while (*ptr)
в то время как вещь ptr
указывает на не нулевой символ, который отмечает конец строки в стиле C.