Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用命令参数?_C - Fatal编程技术网

C 如何使用命令参数?

C 如何使用命令参数?,c,C,fopen.c中有一个错误,我如何解决它? 将argv[1],argv[2]分配给ft,fs时出错 int main ( int argc, char *argv[] ) { //FILE *fs, *ft ; char ch ; //ft = fopen ("d:\\out.txt", "w") ; fs = fopen( argv[1], "r" ); if ( fs == NULL ) { puts

fopen.c中有一个错误,我如何解决它? 将argv[1],argv[2]分配给ft,fs时出错

int main ( int argc, char *argv[] )
{
  //FILE *fs, *ft ;
  char ch ;
  //ft = fopen ("d:\\out.txt", "w") ;        

  fs = fopen( argv[1], "r" );
  if ( fs == NULL )        {               
    puts ( "Cannot open source file" ) ;                           
    exit(1) ;  
  }
  //fs = fopen("d:\in_file.txt","r") ;

  ft = fopen( argv[2], "w" );
  if ( ft == NULL ){               
    puts ( "Cannot open target file") ;               
    exit(1) ;
  }
}

首先,代码中存在一个巨大的缩进问题。请解决它。[编辑:现在可以了]

第二,什么样的错误?fs和ft都等于NULL?
您可以使用perror(const char*s),而不是使用put来显示错误消息。这将为您的消息添加信息,了解errno变量的状态。

这对我很有用。它是一个将元音和换行符('\n')从第一个参数中指定的文件复制到第二个参数中的文件的程序

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

int main(int argc, char **argv) {
  FILE *fi, *fo;
  if (argc != 3) {
    fprintf(stderr, "syntax: %s in out\n", argv[0][0]?argv[0]:"program");
    fprintf(stderr, "copies vowels and linefeeds from in to out\n");
    exit(EXIT_FAILURE);
  }
  fi = fopen(argv[1], "r");
  if (!fi) {
    perror("input file");
    exit(EXIT_FAILURE);
  } else {
    fo = fopen(argv[2], "w");
    if (!fo) {
      perror("output file");
      exit(EXIT_FAILURE);
    } else {
      int ch;
      while ((ch = fgetc(fi)) != EOF) {
        switch (ch) {
          case 'a': case 'e': case 'i':
          case 'o': case 'u': case '\n':
              fputc(ch, fo);
              break;
          default:
              break; /* do nothing */
        }
      }
      fclose(fo);
    }
    fclose(fi);
  }
  return 0;
}

您应该检查
argc
;它是在命令行上传递的参数计数。当它们可能不存在时,您的代码按原样访问
argv[1]
argv[2]
。另外,“分配错误”是什么意思?什么错误?据我所知,这里没有读心术的人,我们也看不到你的显示器。现在ft和fs不存在,因为它们的声明在代码中被注释掉了。你发布的内容不是问题的答案。如果因为问题模糊/定义不明确而无法回答,请在注释中说明(如果问题不合适,请标记该问题)。首先,我的命令行有3个参数:>compilefex in_file.txt out.txt,,,该程序在没有命令参数的情况下运行良好,它从D中获取填充,并将其后缀放入out文件中,正如您看到的注释所示,但在使用命令参数后,fs和ft似乎不接受argv[1]和argv[2]的值您应该完成原始帖子,而不是发布评论。当然,如果将此功能应用于标准筛选器(使用
stdin
作为输入,使用
stdout
作为输出),而不是命令行参数,则会更好。 iueio iuei iaiiaaa io ia ieaiouaaoa ieoieoeaieeeoioou ei ioea ii eoiuie ei ee ooea io eoouuie ei ee i ieei i aeaaeeaei aeoaeuaeuo eaueaooi oeo oei eu