A
1. musst Du counter vor der Benutzung initialisieren, sonst steht da nur Müll drin.
2. solltest Du vor rand() srand() aufrufen, um den Zufallszahlengenerator zu initialisieren, sonst kommen immer die gleichen Werte Bsp.:
#include <ctime>
...
srand((unsigned int)time(NULL));
...
3. wird die letzte Zeile bei Deinem Programm nie gelesen, wenn die Zeile nicht mit '\n' abschliesst
4. erzeugt rand() Zufallszahlen zwischen 0 und counter. Im Fall von 0 wird bei Dir nichts gelesen (if line>0) und word zeigt dann auf irgendetwas. Am besten bei der Erzeugung der Zufallszahl noch eine 1 hinzuaddieren.
Bei mir läuft es so:
int func(char *word)
{
FILE *file;
unsigned int line, counter = 0, character;
if((file = fopen("datei.txt", "r")) == NULL)
return -1;
while((character = fgetc(file)) != EOF)
if(character == '\n')
++counter;
fseek(file, 0L, SEEK_SET);
line = 1 + rand() % counter;
if(line)
while(line--)
{
fgets(word, 25, file);
}
fclose(file);
return 0;
}