>line 149 (maybe others): while(!feof(fdtmp))
don't control the loop in this manner, use the return code from the function doing the reading.

>line 36: char IOFilename[33];
>line 165: filename[50]
The lengths are different.

>line 182: strcpy(n_ptr->IOFilename,filename);
If I'm following your code correctly, I think both these pointers point to the same memory? Is the result undefined behaviour?

Hope this helps a little!