Code:
...
FILE *ifp, *ofp;
char **fname, **lname, *grades;
float **scores;
...
for (i = 0; i < N; ++i)
for (j = 0; j <50; ++j)
fscanf (ifp, "%s", fname);
for (i = 0; i < N; ++i)
for (j = 0; j < 50; ++j)
printf ("%s", fname[i][j]);
printf ("\n");
...
There are some flaws in this, you can't read into a char** without having allocated the needed memory, this will produce random behaviour from your program.
I'll work on a solution in a minut, I just gotta get some breakfast now.