Да, тут уже я на пофиг решил, что (int) -1 почему-то равно 0xFFFFFFFF, хотя я на самом деле имел ввиду ситуации, когда левые три байта равны не нулю, а оставшийся нулю, например 0xFFFFFF00. Тогда и получится то, что я описал.Это, имхо, очевидно, потому что внутри if любое число, кроме 0, даёт True, но при тайпкастинге, который явно указан в man библиотечной strchr, обрезается всё, кроме младшего байта. Лично я это увидел даже не проводя тестов, банально зная, как работает тайпкастинг.
Но если сравнивать с количеством приколов, которые вам надо знать, чтобы писать подобный неочевидный код (а ведь можно было бы для профилактики просто сделать i&=0x000000FF, что более явно), с количеством других приколов даже в ближайшем родственнике Си++, то Сишка — легчайший для системного программирования язык, который явно даёт тебе понять, где какой элемент что делает. Помножьте это на исчерпывающую и стандартизированную документацию, где к каждой функции идут возможные return и нужные структуры данных, и получите на самом деле простейший ЯП с самодокументирующимся кодом (в плане глядя одним глазом в код, другим в принимаемые и возвращаемые значения функций можно понять, что происходит).