Lee carácter por carácter hasta encontrar un carácter de fin de palabra y añades esa palabra al array y vuelves a hacer lo mismo desde la siguiente posición y buscas la nueva palabra en el array con strcmp y si hay coincidencia incrementar su contador y si no la hay añades la nueva palabra al final del array. Lo ideal seria usar memoria dinámica. También puedes contabilizar el número de comas, puntos, espacios, o lo que sea.
Tienes que controlar que el primer carácter no sea un carácter de fin de palabra y si es así avanzas un carácter. 
EDITO:
Aqui te pongo un codigo de cuando yo empecé donde hice algo muy similar pero yo tambien almacenaba los numeros y simbolos:    
Código C:
Ver original//---------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define SIZESTRING 25
 
typedef struct{
   char palabra[SIZESTRING];
   int contador;
}Lista;
 
Lista *AddToList(Lista *pLista, int *pos, int largoPalabra, char *palabra);
 
int main(int argc, char* argv[])
{
   FILE *archivo;
   char palabra[SIZESTRING], caracter;
   int largoPalabra=0, largoNumero=0, posListaPalabras=0, posListaNumeros=0, posListaSimbolos=0, i, encontrada;
 
   //Creamos 3 listas: una para palabras, otra para numeros y otra para simbolos
   Lista *pListaPalabras=NULL, *pListaNumeros=NULL, *pListaSimbolos=NULL;
 
   //Abrimos el archivo a analizar
   archivo 
= fopen("texto.txt","r"); 
   if(archivo != NULL){
      printf("Archivo abierto satisfactoriamente.\n");  
      do{ //Leemos el archivo caracter a caracter hasta el final
         caracter 
= fgetc(archivo
);         if((caracter >= 'A' && caracter <= 'Z') || (caracter >= 'a' && caracter <= 'z')){
            //Si es alfabetico será una palabra asi que si ya teniamos un numero lo almacenamos en la lista de numeros
            //Indicamos que ya no hay numero colocando su largo a 0
            if(largoNumero > 0){
               pListaNumeros = AddToList(pListaNumeros,&posListaNumeros,largoNumero,palabra);
               largoNumero=0;
            }
            //Y guardamos el caracter de la palabra incrementando el largo para saber que contiene una palabra
            palabra[largoPalabra] = caracter;
            largoPalabra++;
         }else if(caracter >='0' && caracter <= '9'){
            //Si por el contrario es numerico será un numero asi que si ya teniamos una palabra la almacenamos en la lista de palabras
            //Indicamos que ya no hay palabra colocando su largo a 0
            if(largoPalabra > 0){
               pListaPalabras = AddToList(pListaPalabras,&posListaPalabras,largoPalabra,palabra);
               largoPalabra=0;
            }
            //Y guardamos el caracter del numero incrementando el largo para saber que contiene un numero
            palabra[largoNumero] = caracter;
            largoNumero++;
         }else{
            //Y si no es ninguno de los anteriores, es un simbolo
            //Comprobamos si habia una palabra en el array y si es asi la almacenamos en la lista de palabras
            if(largoPalabra > 0){
               pListaPalabras = AddToList(pListaPalabras,&posListaPalabras,largoPalabra,palabra);
 
               //Y guardamos el simbolo en la lista de simbolos
                  palabra[0]=caracter;
                  palabra[1]='\0';
                  pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
               }
            //Comprobamos si habia un numero en el array y si es asi lo almacenamos en la lista de numeros
            }else if(largoNumero > 0){
 
               pListaNumeros = AddToList(pListaNumeros,&posListaNumeros,largoNumero,palabra);
               //Y guardamos el simbolo en la lista de simbolos
                  palabra[0]=caracter;
                  palabra[1]='\0';
                  pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
               }
            }else{
               //Si no habia ni palabra ni numero en el array llegamos aqui y guardamos el simbolo en la lista de simbolos
                  palabra[0]= caracter;
                  palabra[1]= '\0';
                  pListaSimbolos = AddToList(pListaSimbolos,&posListaSimbolos,1,palabra);
               }
            }
            largoPalabra=0;
            largoNumero=0;
         }
      if(posListaPalabras > 0){
         printf("\nLista de palabras encontradas\n");          printf("-----------------------------\n");          for(i=0;i<posListaPalabras;i++){
            printf("%s: %d veces\n",pListaPalabras
[i
].
palabra,pListaPalabras
[i
].
contador);          }
 
         if(pListaPalabras != NULL)
      }else{
         printf("No se encontraron palabras en el archivo.");       }
 
      if(posListaNumeros > 0){
         printf("\nLista de numeros encontrados\n");          printf("-------------------------------\n");          for(i=0;i<posListaNumeros;i++){
            printf("%s: %d veces\n",pListaNumeros
[i
].
palabra,pListaNumeros
[i
].
contador);          }
 
         if(pListaNumeros != NULL)
      }else{
         printf("No se encontraron numeros en el archivo.");       }
 
      if(posListaSimbolos > 0){
         printf("\nLista de simbolos encontrados\n");          printf("-------------------------------\n");          for(i=0;i<posListaSimbolos;i++){
            printf("%s: %d veces\n",pListaSimbolos
[i
].
palabra,pListaSimbolos
[i
].
contador);          }
 
         if(pListaSimbolos != NULL)
      }else{
         printf("No se encontraron simbolos en el archivo.");       }
   }else{
      printf("No se pudo abrir el archivo.");    }
   printf("\n\nPulse INTRO para salir.");    return 0;
}
//---------------------------------------------------------------------------
 
//Funcion encargada de almacenar la estructura en la lista
Lista *AddToList(Lista *pLista, int *pos, int largoPalabra, char *palabra)
{
   int encontrada=0, i;
 
   for(i=0;i<*pos;i++){
      if(strcmp(pLista
[i
].
palabra, palabra
)==0){          pLista[i].contador++;
         encontrada=1;
         break;
      }
   }
   if(encontrada == 0){
      if(pLista == NULL){
         pLista 
= malloc(sizeof(Lista
));      }else{
         pLista 
= realloc(pLista
,sizeof(Lista
)*(*pos
+1));      }
      memset(pLista
[*pos
].
palabra,0,SIZESTRING
);       strncpy(pLista
[*pos
].
palabra,palabra
,largoPalabra
);       pLista[*pos].contador++;
      *pos+=1;
   }
   return pLista;
}