-
parameters of fopen
EDIT: I don't know why the code is all on a single line. Even after I edit the post to correct the format, the code still reverts to a single line. Blah.Hi folks.Below is sample code from a book that I am working through. Why does the program work when there is no "" around the mode?if ((fopen(filename, r) == NULL)) doesn't work, so why does the below program work?Thanks in advance.
Code:
/* Demonstrates the fopen() function. */#include #include int main( void ){ FILE *fp; char ch, filename[40], mode[4]; while (1) { /* Input filename and mode. */ printf("\nEnter a filename: "); gets(filename); printf("\nEnter a mode (max 3 characters): "); gets(mode); /* Try to open the file. */ if ( (fp = fopen( filename, mode )) != NULL ) { printf("\nSuccessful opening %s in mode %s.\n", filename, mode); fclose(fp); puts("Enter x to exit, any other to continue."); if ( (ch = getc(stdin)) == 'x') break; else continue; } else { fprintf(stderr, "\nError opening file %s in mode %s.\n", filename, mode); puts("Enter x to exit, any other to try again."); if ( (ch = getc(stdin)) == 'x') break; else continue; } } return 0;}
-
Hi folks.Below is sample code from a book that I am working through. Why does the program work when there is no "" around the mode?
if ((fopen(filename, r) == NULL)) doesn't work, so why does the below program work? Thanks in advance.
Code:
/* Demonstrates the fopen() function. */
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
FILE *fp;
char ch, filename[40], mode[4];
while (1)
{
/* Input filename and mode. */
printf("\nEnter a filename: ");
gets(filename);
printf("\nEnter a mode (max 3 characters): ");
gets(mode);
/* Try to open the file. */
if ( (fp = fopen( filename, mode )) != NULL )
{
printf("\nSuccessful opening %s in mode %s.\n",
filename, mode);
fclose(fp);
puts("Enter x to exit, any other to continue.");
if ( (ch = getc(stdin)) == 'x')
break;
else
continue;
}
else
{
fprintf(stderr, "\nError opening file %s in mode %s.\n",
filename, mode);
puts("Enter x to exit, any other to try again.");
if ( (ch = getc(stdin)) == 'x')
break;
else
continue;
}
}
return 0;
}
-
First of all, please fix your code formatting. Edit: you just fixed it right before my post. :)
Second of all, I would chuck that book and find a better one if I were you.
gets() is bad. There is no safe way to use it.
Assigning the return value from getchar()/getc() to a char variable is (generally) bad. getchar() and getc() return an unsigned character converted to an int, so you can't reliably test for EOF if you save it to a char (which this code doesn't do properly either).
At least it doesn't have "void main" or other travesties like that.
To answer your question, though, mode is a string variable (technically it's an array of char).
-