Это потому, что ваше выражение newItemIDPointer + i
является указателем на символ со смещением i
в строке, а не значением (символом) в этом месте.Вам нужно разыменовать указатель, чтобы получить значение, например:
*(newItemIDPointer + i)
Или более очевидный способ сделать это:
newItemIDPointer[i]
Чтобы объяснить: допустим, у вас есть указательв строку, называемую p
:
char *p = "ABCDE";
Предположим, что указатель p
имеет значение 0x4001
.Это будет адрес первого символа в вашей строке, который соответствует значению буквы ASCII A
(я просто полностью увеличил это число, на практике операционная система и / или компилятор определяют фактическое расположение в памяти)...
Итак, p + 1
даст нам 0x4002
.. расположение буквы B
.Это НЕ значение ASCII B
, которое в десятичном виде равно 66
. Это то, что вы хотите передать в isspace ... значение, хранящееся в этой ячейке памяти, а не адрес ячейки памяти.
Это одна из самых сложных задач для начинающих в C, когда вы получаете хорошее зрелище в голове, когда вы манипулируете адресом места в памяти и когда вы манипулируете данными, хранящимися в этом.место, остальная часть C довольно легко ...