专栏首页小白帽学习之路main函数中的argc和argv到底是个啥?

main函数中的argc和argv到底是个啥?

今天和大家讨论一个常见的但是不容易深入了解的知识点。那就是 main 函数声明中使用到的 argc 和 argv 的含义。

通常我们写主函数的时候一般都是直接使用int main() 或者 void main() 来声明 main 函数。

但是你知道吗?在c89/c99的语言标准中,main函数的声明方式还包括以下形式:

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

以上两种 main 函数的声明方式具有相同的含义。argc 和 argv 的主要用途为程序运行时,将命令行中的输入参数传递给调用函数。

这两个参数的意义分别如下:

int argc:参数个数计数,是一个 int 变量,取值为「用户调用程序输入的参数」+ 1。

为什么要加 1 呢?我们接着往下看。

char **argv:一个存储字符串的数组,会以字符串的形式保存用户调用程序时传入的参数。

argv[0] = 调用程序时使用的程序名
argv[1] = 参数1
argv[2] = 参数2
argv[3] = 参数3
。。。

现在大家知道为什么 argc 的取值要 +1了吧!原因就在于 argv 中存储的第一个字符串是调用程序名。

下面我们动手实践一下,将下面的代码编译后生成对应的可执行程序(.exe)后运行。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
  printf("参数个数=%d\n", argc);
  for (int i = 0; i < argc; i++)
  {
    printf("%s\n", argv[i]);
  }
  system("PAUSE");
  return 0;
}

在操作系统中打开一个命令行。

windows 操作系统 win + R 快捷键打开搜索框,输入 cmd 回车即可。
linux 操作系统 ctrl + alt + t 快捷键即可。

然后我们在命令行中调用该程序,执行 main 函数,输出结果如下图所示:

从上述程序的输出结果可以清楚的看到 argc 和 argv 代表的具体含义。希望大家不要小看这些简单的基础知识对我们的帮助,欢迎大家评论区发言!

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:薛定谔的coding猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 人心易变,这段有趣的C代码也一样!!!

    C语言中的volatile关键字也许大部分人都听过,但实际用过的人可能不多,它的字面意思是“易变的”。今天我们的题目就跟它有关,这也是一道比较著名和经典的面试题...

    7089bAt@PowerLi
  • 人心易变,这段有趣的C代码也一样,来看一下?

    C语言中的volatile关键字也许大部分人都听过,但实际用过的人可能不多,它的字面意思是“易变的”。今天我们的题目就跟它有关,这也是一道比较著名和经典的面试题...

    7089bAt@PowerLi
  • 这绝对是C语言的一个经典例题了!

    意图很明显,要用swap函数中交换main函数中的a和b的值,但是很明显上述代码是达不到要求的,a和b的值没有发生改变。其实本题就是C中比较有名传址和传值的典型...

    7089bAt@PowerLi
  • Linux下C程序的存储空间布局,环境变量和命令行参数

    命令行参数是指从命令行执行程序的时候,给程序的参数。C语言总是从main函数执行的,它的命令行参数被ISO C和POSIX规定为如下:

    zy010101
  • 【编程基础第九讲】main函数也有参数?

    存在问题: main函数我们使用的多关注的少,特别是参数,如何去用? 解决方案: 有C语言初学者朋友不知道怎么应用main函数的参数,其实也不难,只要对C语言...

    程序员互动联盟
  • Android自定义View实现点赞控件

    图片类:LikeImageView 文字类:LikeCharTextView 整合类:LikeView.java 自定义属性:attrs.xml

    砸漏
  • 以太坊合约审计 CheckList 之“以太坊智能合约设计缺陷问题”影响分析报告

    作者:LoRexxar'@知道创宇404区块链安全研究团队 发布时间:2018/08/22

    Seebug漏洞平台
  • iOS开发·NSDate日期基本操作方法

    陈满iOS
  • matlab串口通信

    虚拟串口:vspd安装:http://www.cr173.com/soft/21406.html ? ?

    瓜大三哥
  • swoole 实现 unixSocket 通信

    码缘

扫码关注云+社区

领取腾讯云代金券