It's not strtok
that reads to the first space, it's scanf
:
scanf("%s", expression);
As soon as scanf
sees a space, a TAB, or any other delimiter, it stops reading, and returns the word up to the space. That is why it works when you use a non-blank delimiter.
Replace with fgets
to fix the problem:
fgets(expression, 100, stdin);