El cuento es este:
cuando usted lee el archivo de la lista de palabras con la función fgets(), esta función lo que hace es leer la palabra completa junto con el retorno de línea (o enter, que se compone de 2 caracteres, el 13 y el 10).
Por eso cuando las busca en la sopa, busca que también tenga el retorno de línea y ahí es donde no va a encontrar.
Eso también pasa cuando lee el archivo sopa.txt, pero en este caso no hay problema porque usted va a buscar palabras contenidas ahí, o sea que no importa que éste tenga los retornos de línea.
Lo que hay que hacer es, que cuando lea, antes de copiarlo a la lista de palabras escriba
Código:
cadena[strlen(cadena)-2]=0;
Así trunca cadena quitando los 2 últimos caracteres y luego sí lo copia a palabras[].
Saludos.