C 当main(argv[]中给定值时,为什么fopen会失败
这是我的节目C 当main(argv[]中给定值时,为什么fopen会失败,c,fopen,C,Fopen,这是我的节目 #include <ncurses.h> int main( int argc, char *argv[] ) { initscr(); FILE *fd; char *ProgFile; ProgFile = argv[1]; printw(ProgFile); refresh(); fd = fopen(ProgFile,"rb"); if( fd==NULL ) { p
#include <ncurses.h>
int main( int argc, char *argv[] )
{
initscr();
FILE *fd;
char *ProgFile;
ProgFile = argv[1];
printw(ProgFile);
refresh();
fd = fopen(ProgFile,"rb");
if( fd==NULL )
{
printw("error");
perror ("The following error occurred");
refresh();
}
else
{
printw("bin file loaded: '%s'",ProgFile);
refresh();
}
getch();
endwin();
return 0;
}
#包括
int main(int argc,char*argv[])
{
initscr();
文件*fd;
字符*程序文件;
ProgFile=argv[1];
printw(ProgFile);
刷新();
fd=fopen(ProgFile,“rb”);
如果(fd==NULL)
{
printw(“错误”);
perror(“发生以下错误”);
刷新();
}
其他的
{
printw(“加载的bin文件:'%s',ProgFile”);
刷新();
}
getch();
endwin();
返回0;
}
当运行它时,给出以下错误消息:没有这样的文件或目录
但是如果我硬编码ProgFile=“filemname.bin”;然后程序就完美地工作了
当程序运行时,当询问ProgFile的值时,两个版本都会打印filemname.bin
我已经试着解决这个问题两天了,不知道发生了什么。谁能告诉我怎么了
这是Linux CINOS/< P> < P>的C++,首先是C而不是C++。我在代码中没有看到任何C++。 这个
#包括
#包括
int main(int argc,char*argv[])
{
文件*fd;
字符*程序文件;
ProgFile=argv[1];
printf(ProgFile);
fd=fopen(ProgFile,“rb”);
如果(fd==NULL)
{
printf(“错误”);
}
其他的
{
printf(“加载的bin文件:“%s”,ProgFile);
}
返回0;
}
对我来说非常好。确保传递了正确的参数和正确的路径。我建议您传递整个路径,而不仅仅是filemname.bin。程序在其当前工作目录中查找相对文件名(不以
/
开头的文件名);这是从父级继承的,如果从命令行执行程序,父级就是shell,并且可以在从启动器运行程序时显式设置。因此,您需要确保程序在文件所在的同一目录中启动
(您也可以使用绝对路径或显式的
chdir
系统调用文件所在的目录,但两者都很难看,几乎不可能移动程序。)路径为硬编码时,程序是否打开文件?(为什么在C++中使用<代码> STDIO < /代码>而不是<代码> IOSWATION/COD>?)你检查了工作目录吗?访问权限?你能stat()文件吗?@arne文件很好,在硬编码时打开,而不是在传入名称时打开。我想这可能是某种类型不匹配的问题,但我对它了解不够,无法进一步调试它。@Skeith,你是在同一目录下运行两个版本的程序吗?(不可能有类型错误,因为就fopen
而言,路径名只是char
数组。)请注意:您的代码使用peror
打印fopen
的错误,但是errno
可以由printw
设置,如果它本身失败。以后尽量避免这种情况。你使用的库与我使用的库不同。ncurses应该有stdio,但我不确定它是否完全相同。您是否也在linux上运行该程序?Ncurses没有“包含stdio
”。它只包括页眉,没关系。这些库仅用于显示结果。关键是fopen的论点是正确的。不幸的是,没有,我正在工作,所以我不得不在WindowsXP上试用(无论如何都要使用GCC)。不管怎样,Windows/Linux。。。没关系。该代码可以工作,并且在任何操作系统中都可以。我坚持认为您的问题在于文件路径。输入完整的路径,而不仅仅是文件名,它就会工作。
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
FILE *fd;
char *ProgFile;
ProgFile = argv[1];
printf(ProgFile);
fd=fopen(ProgFile,"rb");
if( fd==NULL )
{
printf("error");
}
else
{
printf("bin file loaded: '%s'",ProgFile);
}
return 0;
}