Dynamic fopen filepath in C
char filePath[200];
printf("Enter filepath: \n");
fgets(filePath, 200, stdin);
f = fopen(filePath, "r");
while(!feof(f)) // crashed on this line
{
}
I cannot for some reason get this to work. Please could some one point out what I am doing wrong on this.
Could you ad开发者_如何学JAVAvice the correct way to write code for opening a filepath specified by user through command prompt?
Thanks, Freddy
fopen(3)
returns NULL
if it cannot open the file. You should always check for that. fgets(3)
does that too, but your problem is probably the new-line character that it keeps in the returned string.
fgets
puts endline to the end of string (\r\n in Windows). So your filePath contains garbage at the end and file of that name doesn't exist. I would recommend to use scanf("%[^\r\n]s", filePath)
instead. (scanf
may differ on some implementations, please read your documentation.)
update: You should also ensure there won't be a buffer overflow by specifying buffer size. For example this way:
char filePath[100];
scanf("%99[^\r\n]s", filePath);
Try something like:
size_t l = strlen(filePath);
if (filePath[l-1] == '\n') filePath[--l-1] = 0;
if (filePath[l-1] == '\r') filePath[--l-1] = 0;
You check the error code from fgets and fopen. Both return null if they failed
精彩评论