From: dbe AT wgn DOT net ($Bill Luebkert) Subject: Re: gcc and file reading HELP!! 26 Oct 1997 20:52:32 -0800 Message-ID: <345415EA.A32C0630.cygnus.gnu-win32@wgn.net> References: <199710262046 DOT PAA17818 AT romeo DOT its DOT uwo DOT ca> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: "Steven I. Pollmann" Cc: gnu-win32 AT cygnus DOT com Steven I. Pollmann wrote: > > Sorry about the message, but I'm having a problem with my "c" > program reading lines of text from a file with gnu-win32. The file compiles > fine, but when it executes, > the lines are displayed, and then stack errors are reported to the screen at > the end, terminating the program. The program appears to work fine on the > Unix operating system we have at school. Please help, I'd like to get this > working with windows. > > here is the program: More than likely you're overflowing a buffer. > #include > #define maxFilename 40 40 is too small for long filenames. > int main() > { > int OpenFile(FILE **filePoint, char fileName [maxFilename]); > void CloseFile(FILE **filePoint); > void PrintFileContents(FILE **filePoint); > > char userFile[maxFilename]; > FILE *sourcefp; > > printf("Enter a file to open: \n"); > scanf("%s",userFile); > printf("file \"%s\" is being opened...",userFile); > > if (OpenFile(&sourcefp, userFile) == 1) > { > printf("file \"%s\" opened.\n",userFile); > > PrintFileContents(&sourcefp); > > CloseFile(&sourcefp); > printf("file \"%s\" closed.\n",userFile); > } > > return 0; > } > > /* open file for reading */ > > int OpenFile(FILE **filePoint, char fileName [maxFilename]) > { > if ((*filePoint = fopen(fileName,"r")) == NULL) > { > printf("Can't open %s for reading \n",fileName); > return 0; > } > else > { > *filePoint = fopen(fileName,"r"); > return 1; > } > } > > /*close file */ > > void CloseFile(FILE **filePoint) > { > fclose(*filePoint); > } > > /* Print File contents */ > > void PrintFileContents(FILE **filePoint) > { > char info[20]; I would change this ridiculously small buffer from 20 to BUFSIZ. fscanf is basically a terrible routine in that it can overwrite your buffer. > while ((fscanf(*filePoint,"%s",info)) != EOF) > { > printf("%s\n",info); > > } > } HTH, -- ,-/- __ _ _ $Bill Luebkert (_/ / ) // // DBE Collectibles / ) /--< o // // http://www.wgn.net/~dbe/ -/-' /___/_<_