为什么我的程序没有正确检查参数的数量?

时间:2015-02-14 19:08:36

标签: c command-line-arguments binary-search-tree stderr

好吧所以我正在编写一个二进制搜索树的代码,它必须从输入文件中读取字符串:" input.txt"我正在尝试提供我的程序命令行参数。我的程序应该采用两个命令行参数,程序的名称,然后是文件的名称。如果args的数量不是两个,我会对它进行错误检查以停止程序。当我运行" ./ a.out main.c input.txt"?

时,为什么我的程序仍会运行错误检查

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 15

typedef struct treeNode{
  char string[MAXLEN+1];
  struct treeNode *left;
  struct treeNode *right;
}treeNode;

treeNode * insert(treeNode *node, char s[MAXLEN]){
  if(node == NULL){
    treeNode *temp;
    temp = (treeNode *)malloc(sizeof(treeNode));
    strncpy(temp -> string, s, sizeof(treeNode));
    temp -> left = NULL;
    temp -> right = NULL;
    return temp;
  }

  else if(strcmp(node->string, s)>0){
    node -> right = insert(node->right, s);
  }
  else if(strcmp(node->string, s)<0){
    node -> left = insert(node->left, s);
  }
  else if(strcmp(node->string, s) == 0){
    node -> left = insert(node->left, s);
  }

}

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

  treeNode *root = NULL;

  FILE *ifp;
  FILE *ofp;
  char s[MAXLEN+1];

  if(argc != 3){
    fprintf(stderr, "Usage: %s file\n", argv[1]); exit(1);
  }

  if((ifp = fopen(argv[2], "r")) == NULL){
    fprintf(stderr, "Could not open file: %s\n", argv[2]); exit(1);
  }

  ofp = fopen("output.txt", "w+");

  fgets(s, MAXLEN, ifp);

  insert(root, s);

  fprintf(ofp, "%s\n", root->string);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

argc将始终至少为1,因为argv[0]包含可执行文件的路径。 因此,您应该检查if ( argc != 3 ),因为您从命令行传递了2个参数。

执行./a.out main.c input.txt时,argv[1]将为main.cargv[2]将为input.txt

argv数组中访问所需元素时,您在许多地方都离开1,因此请进行适当的更改。使用argv[1]的地方,您需要将其更改为argv[2]