In C, it may be better not to cast the return value of malloc.
grid = (char *)malloc(sizeof(char) * 9 * 9);
Checking the return value is always recommended. As is here.
f_read = fopen(argv[1], "r");
Checking return values will save you countless hours of debugging, so it's a good habit to start. Unless you like to pull your hair out for hours.
This line was missing a {.
for ( t = 0; t <50; t++ )
Here is a place to fix up:
while ( (num = fscanf(f_read, "%c", tempGrid))!= EOF )
I might go with something more like this.
for ( i = 0; i < 50 && fscanf(f_read, "%c", &tempGrid[i]) == 1; i++ )
You are only reading into the first element of tempGrd. Later you pretend you have filled the whole thing up.
Multiplying by sizeof(char) is the long way of multiplying by one, which is pointless.
If the number of characters in the file may be less than your 50, it might be wise only to print out as many as were read.
Take another swing and we'll move forward from there.