Я не уверен, но думаю, потому что у вашего del не будет правильного '\ 0' в конце.
Вы должны убедиться, что строка завершена NULL или большая часть строковой функции будет считывать память после вашей переменной, что может привести к LOTS проблем
примерно так будет лучше:
char *del = ";";
char input[BUFLEN];
while(fgets(input, BUFLEN, fp)) {
input[strlen(input)-1]='\0';
char* record = strtok(input, del);
while(record) {
printf("Record: %s\n",record);
record = strtok(NULL, del);
}
}