Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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 我如何处理main中的参数? #包括 int main(int n){ int n; printf(“%d/n”,n); 返回0; }_C_Main - Fatal编程技术网

C 我如何处理main中的参数? #包括 int main(int n){ int n; printf(“%d/n”,n); 返回0; }

C 我如何处理main中的参数? #包括 int main(int n){ int n; printf(“%d/n”,n); 返回0; },c,main,C,Main,我将了解main中的参数是如何工作的,并就我在这段代码中的错误征求建议。要处理参数,需要两个参数: #include <stdio.h> int main(int n){ int n; printf("%d/n",n); return 0; } #包括 int main(int argc,char*argv[]) { //用argv做点什么 返回0; } argv是一个字符串数组,以null结尾并包含参数(第一个参数是可执行文件的名称) argc是参数的计数(数组ar

我将了解main中的参数是如何工作的,并就我在这段代码中的错误征求建议。

要处理参数,需要两个参数:

#include <stdio.h>

int main(int n){

int n;

printf("%d/n",n);

return 0;

}
#包括
int main(int argc,char*argv[])
{
//用argv做点什么
返回0;
}
  • argv是一个字符串数组,以null结尾并包含参数(第一个参数是可执行文件的名称)

  • argc是参数的计数(数组argv的长度)

您的代码可以这样工作:

#include <stdio.h>

int main (int argc, char *argv[])
{
  //Do someting with argv

  return 0;
}
#包括
intmain(intargc,char*argv[]){
如果(argc>1)
printf(“%s\n”,argv[1]);
其他的
printf(“缺少参数。\n”);
返回0;
}

main
功能原型只能是其中之一:

#include <stdio.h>

int main(int argc, char *argv[]){  
    if(argc > 1)
        printf("%s\n",argv[1]);
    else
        printf("argument missing.\n");

    return 0;
}
如果您查看最后两个原型,有两个参数。第一个是传递给程序的参数数,第二个是参数列表。第一个参数(
argv[0]
)始终保留给程序名

所以你可以这样做:

int main();

int main(int argc, char *argv[]); (*) Check my comment for this one.
int main(int argc, char **argv);
现在,您可以将该参数传递给程序(
/program\u name 15
)并将其打印出来

注意:
atoi
仅用于演示目的

引用标准:

程序启动时调用的函数名为
main
。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数:

#include <stdio.h>

int main(int n){

int n;

printf("%d/n",n);

return 0;

}
或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 使用,因为它们是声明它们的函数的本地函数):

或同等品;)或者以其他实现定义的方式

如果已声明,则主功能的参数应符合以下要求 限制条件:

  • argc的值应为非负
  • argv[argc]应为空指针
  • 如果argc的值大于零,则数组成员argv[0]到argv[argc-1]应包含指向字符串的指针,这些字符串在程序启动之前由主机环境给定实现定义的值。目的是向程序提供在程序启动之前从托管环境中的其他位置确定的信息。如果主机环境无法提供包含大写和小写字母的字符串,则实现应确保以小写字母接收字符串
  • 如果argc的值大于零,则argv[0]指向的字符串表示程序名;如果程序名在主机环境中不可用,则argv[0][0]应为空字符。如果argc的值大于1,则argv[1]通过 argv[argc-1]表示程序参数
  • 程序应可修改参数argc和argv以及argv数组指向的字符串,并在程序启动和程序终止之间保留其最后存储的值

  • 在这种情况下,你不需要这个论点,因为你什么都不做。但是你可能需要它来做类似的事情。您的代码不会编译,因为
    intmain(int)
    不是C提供的重载main方法之一

    int main(int argc, char *argv[]) { /* ... */ }
    
    #包括
    int-anotherMethod(INTA);
    int main(){
    int n=非热法(5);
    printf(“%d/n”,n);
    返回0;
    }
    int-anotherMethod(int-a){
    a=a+5;
    返回a;
    }
    

    参数可以传递给main,以便在命令行参数中使用。

    您应该替换main函数:

    #include <stdio.h>
    int  anotherMethod(int a);
    int main(){
    
    int n = anotherMethod(5);
    
    printf("%d/n",n);
    
    return 0;
    
    }
    
    int  anotherMethod(int a){
       a = a + 5;
       return a;
    }
    
    您将获得以下输出:

    ./foo 1 2 3
    

    main
    的参数的工作方式如下:

    foo
    1
    2
    3
    
    将此文件编译成二进制文件,将其称为yourbin,然后在shell中执行时:

    int main(int argc, char ** argv) {
      // your code
    }
    
    argc
    的值是传入的参数数,在本例中为2,
    argv
    是指向C字符串数组的指针,在本例中为
    “/yourbin”、“arg1”、“arg2”


    因此,您的整数
    n
    将是从命令行传入的参数数。

    我建议您阅读一下C中的作用域

    这里有一些关于和这个的链接


    在这种情况下,如果要在程序中使用n变量,可以根据语言标准检查第一条注释,
    main
    采用以下形式之一:

    ./yourbin arg1 arg2
    

    在第二种形式中,
    argc
    包含传递给
    main
    的命令行参数的数量,而
    argv
    是包含参数本身的字符串向量。第一个参数(
    argv[0]
    )是用于调用程序的命令,因此
    argc
    始终至少为11

    一个实现可以自由地为
    main
    定义额外的签名-检查编译器文档

    快速脏示例:从命令行中获取两个整数,将它们相加,然后打印结果(假设为C99):

    #包括
    #包括
    #包括
    整数转换(字符*arg,整数*val)
    {
    int结果=1;
    char*chk;
    int x=strtol(arg和chk,10);
    如果(!isspace(*chk)&&*chk!=0)
    {
    结果=0;
    fprintf(stderr,“%s不是有效的整数!\n”,arg);
    返回0;
    }
    *val=x;
    返回1;
    }
    int main(int argc,字符**argv)
    {
    如果(argc<3)
    {
    fprintf(标准,“用法:%s x y\n”,argv[0]);
    出口(0);
    }
    int x,y;
    if(转换(argv[1],&x)和转换(argv[2],&y))
    {
    printf(“%d\n”,x+y);
    }
    返回0;
    }
    
    谁破坏了IE的代码格式


    1.这对于所谓的托管实现是正确的;基本上,任何在操作系统下运行的东西。还有一些独立的实现,通常是嵌入式系统,它们可以自由定义
    int main(int argc, char ** argv) {
      // your code
    }
    
    ./yourbin arg1 arg2
    
    int main( void )
    
    int main( int argc, char **argv ) // or char *argv[]
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    
    int convert( char *arg, int *val )
    {
      int result = 1;
      char *chk;
      int x = strtol( arg, &chk, 10 );
      if ( !isspace( *chk ) && *chk != 0 )
      {
        result = 0;
        fprintf( stderr, "%s is not a valid integer!\n", arg );
        return 0;
      }
      *val = x;
      return 1;
    }
    
    int main( int argc, char **argv )
    {
      if ( argc < 3 )
      {
        fprintf( stderr, "USAGE: %s x y\n", argv[0] );
        exit( 0 );
      }
    
      int x, y;
      if ( convert( argv[1], &x) && convert( argv[2], &y ))
      {
        printf( "%d\n", x + y );
      }
      return 0;
    }