Allocate a buffer (the one that str points to), and pass the size of the buffer for num.  The actual space taken up will only be the length of the text read by fgets.
Something like:
char str[1000];
fgets(str, 1000, &file);
If the next line only has 10 characters before the newline, then str will hold those 10 characters, the newline, and the null terminator.
Edit: just in case there is any confusion, I didn't intend the above to sound as if the extra space in the buffer isn't in use.  I only meant to illustrate that you don't need to know ahead of time how long your string is going to be, as long as you can put a maximum length on it.