Это из-за приоритета операций. Вам нужно поставить дополнительный набор паренов, чтобы убедиться, что это происходит в правильном порядке:
char * splitter;
if((splitter = strchr(key, ':')) != NULL && *(splitter + 1) == ' ')
в противном случае он будет оцениваться так:
splitter = (strchr(key, ':') != NULL)
Поскольку strchr(key, ':') != NULL
будет иметь значение 1
или 0
, в вашем примере вы назначаете целое число для типа указателя, отсюда и предупреждение.
однако, я бы просто написал это, как во втором примере, так как он проще и менее подвержен ошибкам. Сокращение на одну строку ничего не добавляет, кроме сложности.