解析 main 函数中的参数 int argc, char *argv[]

解析 main 函数中的参数 int argc, char *argv[]

参考官方文档:主函数 - cppreference.com

有时会见到C/C++main 函数中写了参数 int argc, char *argv[]

这两个参数的含义如下:

  • argc :argument cont,传入 main 函数的参数个数,由程序自动统计,默认以空格为分隔符
  • argv :argument vector,传入 main 函数的具体参数值(以字符串存储)

例程

// test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("numOfArgc = %d\n\n", argc);
    printf("numOfArgv = %lu\n\n", sizeof(*argv));

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

    return 0;
}

编译运行:

betty@betty-VirtualBox:~/桌面/TEST/test$ gcc test.c -o target
betty@betty-VirtualBox:~/桌面/TEST/test$ ./target what a nice day!
numOfArgc = 5

numOfArgv = 8

argv[0] = ./target
argv[1] = what
argv[2] = a
argv[3] = nice
argv[4] = day!

说明在命令行输入的所有内容会被存储到 argv 数组中,但 argc 并不是这个 argv 数组的长度,其长度为8,且具有默认值

// test.c 
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("numOfArgc = %d\n\n", argc);
    printf("numOfArgv = %lu\n\n", sizeof(*argv));

    for(int i = 0; i < sizeof(*argv); i++){//注意循环条件
        printf("argv[%d] = %s\n", i, argv[i]);
    }

    return 0;
}

编译运行:

betty@betty-VirtualBox:~/桌面/TEST/test$ ./target
numOfArgc = 1

numOfArgv = 8

argv[0] = ./target
argv[1] = (null)
argv[2] = SHELL=/bin/bash
argv[3] = COLORTERM=truecolor
argv[4] = TERM_PROGRAM_VERSION=1.74.2
argv[5] = LANGUAGE=zh_CN:zh
argv[6] = PWD=/home/betty/桌面/TEST/test
argv[7] = LOGNAME=betty

总结

  • 如果程序需要在启动时命令行获取参数,则需要使用这2个参数
    • 如包管理工具 pip 的命令就需要带有参数:pip install flask
  • 否则不需要这2个参数,这种时候有时会用 main(void) 的写法显式声明不需要参数

原文链接: https://www.cnblogs.com/3to4/p/17041600.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    解析 main 函数中的参数 int argc, char *argv[]

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311107

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午11:52
下一篇 2023年2月16日 上午11:52

相关推荐