Fopen 无法从命令行读取
Fopen Fails to read from Command line
Fopen return NULL 基于
'fopen' return a NULL
现在我有一个文件要读取,我想在控制台上输出,但它会抛出一个错误,如 fp return NULL here a snippet
#include<stdio.h>
int main(char argc,char **argv)
{
if(argc < 2)
{
printf("Usage:\t");
printf("Hash File path");
}
printf("Hash File : %s\n", argv[1]);
FILE *fp = fopen("argv[1]","r");
if(fp == NULL)
{
fprintf(stderr,"Can't open %s\n", argv[1]);
}
else
{
char buff[100];
while(!feof(fp))
{
if(fgets(buff,100,fp) == NULL) break;
fputs(buff,stdout);
}
fclose(fp);
}
return 0;
}
每当我从命令行传递文件路径 E:\design\test.txt 时,它总是显示错误报告 "Can't open...." 就像这样
所以混淆是
为什么 Fopen 无法从命令行读取?
代码中几乎没有问题。首先,这个
FILE *fp = fopen("argv[1]","r");
错了。 fopen()
的第一个参数应该只是 argv[1]
而不是 "argv[1]"
。例如
FILE *fp = fopen(argv[1],"r");
if(fp == NULL) {
fprintf(stderr,"Can't open %s\n", argv[1]);
return 0; /* this you forgot, if fopen fails,then no need to proceed further */
}
此外,如果 argc<2
为真,那么只写 printf()
是不够的,您必须要求用户提供正确的命令行输入,并且不要让用户继续。应该是
if(argc < 2) {
printf("Usage:\t");
printf("Hash File path");
return 0; /* return from here or use exit(0) */
}
其次,阅读 here 为什么 feof()
是错误的。你可以像
一样使用它
while(fgets(buff,100,fp) != NULL) { /* no need to use break */
fputs(buff,stdout);
}
而不是
while(!feof(fp))
{
if(fgets(buff,100,fp) == NULL) break;
fputs(buff,stdout);
}
Fopen return NULL 基于
'fopen' return a NULL
现在我有一个文件要读取,我想在控制台上输出,但它会抛出一个错误,如 fp return NULL here a snippet
#include<stdio.h>
int main(char argc,char **argv)
{
if(argc < 2)
{
printf("Usage:\t");
printf("Hash File path");
}
printf("Hash File : %s\n", argv[1]);
FILE *fp = fopen("argv[1]","r");
if(fp == NULL)
{
fprintf(stderr,"Can't open %s\n", argv[1]);
}
else
{
char buff[100];
while(!feof(fp))
{
if(fgets(buff,100,fp) == NULL) break;
fputs(buff,stdout);
}
fclose(fp);
}
return 0;
}
每当我从命令行传递文件路径 E:\design\test.txt 时,它总是显示错误报告 "Can't open...." 就像这样
所以混淆是
为什么 Fopen 无法从命令行读取?
代码中几乎没有问题。首先,这个
FILE *fp = fopen("argv[1]","r");
错了。 fopen()
的第一个参数应该只是 argv[1]
而不是 "argv[1]"
。例如
FILE *fp = fopen(argv[1],"r");
if(fp == NULL) {
fprintf(stderr,"Can't open %s\n", argv[1]);
return 0; /* this you forgot, if fopen fails,then no need to proceed further */
}
此外,如果 argc<2
为真,那么只写 printf()
是不够的,您必须要求用户提供正确的命令行输入,并且不要让用户继续。应该是
if(argc < 2) {
printf("Usage:\t");
printf("Hash File path");
return 0; /* return from here or use exit(0) */
}
其次,阅读 here 为什么 feof()
是错误的。你可以像
while(fgets(buff,100,fp) != NULL) { /* no need to use break */
fputs(buff,stdout);
}
而不是
while(!feof(fp))
{
if(fgets(buff,100,fp) == NULL) break;
fputs(buff,stdout);
}