Do not use `string word = NULL`. `fscanf` will not "put" anything in it because NULL is a defined constant, and it will not give an error. You could end up in an infinite loop (it also will not detect EOF). 

Declaring `word` as a char array is a fine approach. Remember 45 letters will "fit" in the array declared `char word[45]`, but the "%s" directive of fscanf will try to make it a valid string, and will therefore need one more byte for the null terminator. 

Another option would be to use the C type `char *` and allocate it with `malloc` or `calloc`. 


----------
In the interest of completeness, there is a "more comfortable" approach. You can use the "m" option in the conversion specification, and `fscanf` will allocate the memory; it is up to the programmer to free it. Something like this:

    string word;
    while(fscanf(infile,"%ms",&word) != EOF)
    {
        // do "word" logic
        free(word);
    }

From `man fscanf`:

> An  optional  'm'  character.   This is used with string conversions (%s, %c, %[), and relieves the caller of the
              need to allocate a corresponding buffer to hold the input: instead, scanf()  allocates  a  buffer  of  sufficient
              size,  and assigns the address of this buffer to the corresponding pointer argument, which should be a pointer to
              a char * variable (this variable does not need to be initialized before the  call).   The  caller  should  subse‐
              quently free(3) this buffer when it is no longer required.