这是我的程序
#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;
}
运行时给出此错误消息:没有这样的文件或目录。
但如果我硬编码ProgFile =“filemname.bin”;然后程序运行得很好。
当程序运行时,当询问ProgFile的值时,两个版本都会打印filemname.bin。
我一直试图解决这个问题2天,并且不知道发生了什么。有谁能告诉我出了什么问题?
这是Linux centos上的c ++
答案 0 :(得分:3)
首先,这是C而不是C ++。我的代码中没有看到任何C ++。
此
#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;
}
对我来说效果很好。确保你传递正确的参数和正确的路径。我建议你传递整个路径,而不仅仅是 filemname.bin 。
答案 1 :(得分:1)
程序在其当前工作目录中查找相对文件名(不以/
开头);这是从父进程继承的,如果从命令行执行程序,它是shell,并且可以在从启动程序运行它时显式设置。因此,您需要确保程序在文件所在的同一目录中启动。
(你也可以使用一个绝对路径或者做一个明确的chdir
系统调用文件所在的目录,但两者都是丑陋的,并且几乎不可能移动程序。)