从命令行获取参数并且无法打开文件

时间:2017-02-08 02:39:49

标签: c

int hailstoneLength(int n) 
{
    int u = n;
    if(u != 1)
    {
        return 1 + hailstoneLength(hailNext(u));
    }
    else // if u = 1
    {
        return 1;
    }
}

在我输入的命令行中

int main(int argc, char *argv[])
{

FILE *fp;
printf("%s\n", argv[0]);
printf("%s\n", argv[1]);
printf("%s\n", argv[2]);

fp = fopen(argv[1], "r");

if((fp == NULL) || strcmp(argv[0], "MySearch") != 0)
{
  fprintf(stdout, "File is NULL ");
  fflush( stdout );
  exit(0);
}

然后

gcc Lab2.c -o MySearch

功能打印

./MySearch arr_file.txt 6   

有一个名为arr_file.txt的文件,但为什么无法打开它?有人可以帮忙吗?提前致谢。

3 个答案:

答案 0 :(得分:2)

  • argv[0]"./MySearch"
  • "MySearch"
  • 不同
  • 所以strcmp()返回非零
  • 因此无论if的值如何,fp条件都会得到满足。

答案 1 :(得分:0)

您的argv [0]是“./ MySearch”而不仅仅是“MySearch” => strcmp(argv [0],“MySearch”)!= 0

那么你的if条件((fp == NULL)|| strcmp(argv [0],“MySearch”)!= 0)会返回true =>内部的代码块if使用Null文件通知执行。

只需在if子句中键入“MySearch arr_file.txt 6”或删除/更改strcmp(argv [0],“MySearch”)!= 0。

答案 2 :(得分:0)

  • 您的代码正在执行strcmp("./MySearch", "MySearch),而永远不会评估为0。我建议使用:

    const char *filename = "./MySearch";

    然后做:

    strcmp(argv[0], filename)
    
  • 使用perror()从您的操作系统获取错误消息,它会提供更好的反馈。

您的代码可能如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    FILE *fp;
    const char *filename = "./MySearch";

    for (int i = 0; i < argc; i++) {
        printf("%s\n", argv[i]);
    }

    fp = fopen(argv[1], "r");
    if (fp == NULL || strcmp(argv[0], filename) != 0) {
        perror(argv[1]);
        exit(EXIT_FAILURE);
    }

    return 0;
}