Tic-Tac-Toe for the terminal
First of all: nice work! It's easy to read and understand.

Program organization

It's very good that you split the task to small functions.
Reading the body of main reveals nicely the overall flow.

Ideas for further improvement:


place does two things: it reads input from user and updates the state of the board. It would be good to separate these logically distinct steps to different functions. A new function, say read_next_move could return boolean just like place, and take parameters board and pointers to x and y, whose values will be used when updating the board state.
The name check is too generic. How about is_game_over or has_player_won.
Printing the winner would be good to move to a dedicated function, as you did with other steps.


Use more constants

The special symbols -, x and o would be good to define as constants.
So that instead of if (board[pos] == 'x' || board[pos] == 'o'),
you could write more descriptively if (board[pos] == PLAYER_X || board[pos] == PLAYER_O), and if ever needed change the values easily.
By the way, in this particular example I would replace the condition with if (board[pos] != AVAILABLE).