从命令行读取文件,文件名作为参数

时间:2017-12-24 14:06:29

标签: c command-line argv argc

我应该打开并读取此文件,当我运行程序时,将其名称作为命令行的参数传递,但它会继续执行相同的错误,即我在程序中设置的打开失败错误。文件是正确的文件夹,我也打印了参数,看到包含程序名称的文件没有很好地存储,但它只是fopen函数失败..有人可以帮我吗? 这是代码:

 int main(int argc, const char * argv[])
{
if(argc != 2)
{
    fprintf(stderr, "Error: please insert just the name of the file after the one of the program!\n");
    exit(EXIT_FAILURE);
}

FILE *foo;
foo = fopen(argv[1], "r");

if(foo == NULL)
{
    printf("Error: failed to open the file\n Argument: %s\n", argv[1]);
    exit(EXIT_FAILURE);

}

这里我留下截图

command line screenshot

how i place the txt file

its position

the program working properly if not run from the cmd line

1 个答案:

答案 0 :(得分:3)

这是你的问题:

enter image description here

由于您只将文件名传递给程序,因此它会查找当前的工作目录。正如我们在前一个命令行的ls命令中看到的那样,当前工作目录中只有两个文件: main.c和prova。文件ex3.txt 不存在。

根据屏幕截图,这些命令行的当前工作目录似乎是~/documents/computer science xcode project/21:12/ex3/ex3, 但ex3.txt文件实际上在目录中 <something obscured by pulldown>/ex3-<something>/Build/Products/Debug

显然IDE使用的是Debug目录,而不是ex3目录, 作为当前的工作目录, 因为它设法在那里找到ex3.txt而不要求你在文件名前面提供任何目录路径。