Эти два всегда отсутствуют, потому что на первой итерации цикла вы перезаписываете их вызовом strcat.
После входа в цикл ваш буфер содержит: "1 \ 02 \ 03/4/5/ 6 "внутренний указатель strtok указывает на" 3 ".tokens [1] указывает на «2».
Затем вы вызываете strcat: «12 \ 0 \ 03/4/5/6», поэтому указатель вашего токена [i] указывает на «\ 0».При первой печати ничего не печатается.
Последующие вызовы в порядке, поскольку нулевые символы не перезаписывают входные данные.
Чтобы исправить это, необходимо создать выходную строку во второй буфер, а неодин, который вы анализируете.
Рабочая (?) версия:
#include <stdio.h>
#include <string.h>
int main(void)
{
int i = 0;
char *token[128];
char tmp[128];
char removed[128] = {0};
strcpy(tmp, "1/2/3/4/5/6");
token[i] = strtok(tmp, "/");
strcat(removed, token[i]);
printf("%s\n", token[i]);
i++;
while ((token[i] = strtok(NULL, "/")) != NULL) {
strcat(removed, token[i]);
printf("%s", token[i]);
i++;
}
return (0);
}