原创: Linux 微知识

在大学里面,老师一般会这样教,定义main 函数应该是这样的:

甚至是这样的:

但是其实在 Linux 下,一个正确的main 函数应该被定义为如下:

大家可以看到,main 函数中有两个参数,分别是 argc 和 argv。但是在 C 语言中规定,main 函数是不能被别的函数调用的,那究竟是谁传递了参数给main 函数呢?

答案是:命令行

当我们在命令执行程序时,其实就是在给main 函数传递参数,其中 argc 的全称是 argument count,即命令行的参数的数目。 argv 的全称是 argument value,即命令行的参数对应的值。

我们先来研究一下这个 argc 吧,注意,这个 argc 指的不是额外的参数,而是包含执行文件在内的参数个数。举个例子吧,假设有程序如下:

执行程序结果:

命令行的参数是以空格分开,大家可以看到,argc 就是参数个数,包含执行的文件在内。

那么再来看看这个 argv,类型是 char *[],如果有一定 C 语言功底的同学应该知道,这个是一个字符指针数组,通俗一点来讲,就是一个数组名字叫 argv,并且数组中放着很多个字符串:

那么究竟是谁放在里面呢?没错,就是命令参数的值,以上面的实例为例子

gec@ubuntu:~$ ./example one two three 代表当前有 4 个参数,那么 argv 的数组中就应该是这样的:

那么数组访问每个成员,我们在大学里面已经学习过了,使用下标就可以访问:argv[0]为数组第一个成员,argv[1]为数组第二个成员,如此类推。

那么接下来写个程序验证一下:

执行的结果:


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux C 语言:main 函数的命令行传参
喜欢 (6)

http://www.taodudu.cc/news/show-638984.html

相关文章:

  • Linux高级篇——IO系统编程
  • 机器的速度与主频之间的关系
  • go环境搭建
  • 2020年最全最简单KMP算法讲解
  • 详解JVM内存结构(基于JDK8)
  • KMP算法求解next数组值(模式串从下标0开始或从下标1开始)以及求值后与主串的匹配过程
  • LeetCode刷题知识总结
  • xil_printf打印遇到的问题
  • ZYNQ UARTLite接收不定长数据
  • 第2章 信号、接口和引脚(XIlinx ZYNQ-7000 SOC UG-585文档)
  • AR# 58294 Zynq-7000 SoC: PS SPI 控制器文档升级
  • Vivado 自定义VHDL的IP核
  • 17章 SPI控制器(XIlinx ZYNQ-7000 SOC UG-585文档)
  • 新建VHDL的Vivado工程
  • VHDL的数据对象(学习笔记1)
  • AXI quad SPI没有输出
  • ZYNQ中断示例修改
  • MATLAB常用命令、函数与运算
  • Matalab类定义
  • XScuGic_Connect分析
  • MATLAB数字信号处理函数
  • AXI-IIC官方示例解析
  • MATLAB浮点数与十六进制(浮点数)转换
  • verilog中的代码使用
  • Verilog如何避免Latch
  • 组合电路Verilog的几种描述方式
  • Verilog中的加法器(半加器,全加器,串行、超前进位加法器)
  • STM32的I/O口的八种工作模式
  • 上拉输入与下拉输入
  • void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解

LInux命令行参数相关推荐

  1. linux 参数解析,Linux 命令行参数解析

    在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢? 通常使用GNU C提供的函数getopt.getopt_long.getopt_long_only函数来解析命令 ...

  2. linux命令行参数含空格,Linux的命令行参数风格

    在Linux中,几乎所有程序都会提供几个命令行选项,有些程序提供的命令行参数多到咂舌!这样做使得程序的运行非常灵活,而且程序的配置信息可以由脚本指定,这对于作为管道或过滤器的程序尤其重要.有三种约定可 ...

  3. linux读取命令行参数,Linux学习笔记(五)—— Linux命令行参数

    一.客户端输入 脚本执行的过程是对数据变量进行处理的过程,之前在脚本中处理的数据都是静态数据,而不是和客户端交互的动态数据.在大多数情况下脚本执行过程需要和客户端进行交互,用来获得脚本处理的数据,这些 ...

  4. c 运行 java linux命令行参数,Linux下用命令行编译运行Java总结

    最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令.平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还 ...

  5. 隐藏与篡改Linux命令行参数

    如果一个程序的命令行是一个password之类的不便展示的字符串,如何不让ps打印出来呢? ps是从/proc/$pid/cmdline里拿的命令行,而/proc/$pid/cmdline则是在内核空 ...

  6. linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本

    我觉得我在这里似乎遗漏了一些明显的东西,但是我似乎无法弄清楚发生了什么.我有一个从C代码调用的perl脚本.脚本参数是这样的: my_script "/some/file/path" ...

  7. Linux命令行参数前加--,-和不加杠

    参数前"-"的表明后面的参数是字符形式. 参数前"--"的则表明后面的参数是单词形式. 参数前有横的是System V风格. 参数前没有横的是BSD风格.  转 ...

  8. Linux命令行参数前加杠-和不加杠的区别

    参数前"-"的表明后面的参数是字符形式. 参数前"–"的则表明后面的参数是单词形式. 参数前有横的是System V风格. 参数前没有横的是BSD风格.

  9. 【linux】Valgrind工具集详解(八):Memcheck命令行参数详解

    [linux]Valgrind工具集详解(五):命令行详解中不够全,在此专门针对Memcheck工具中的命令行参数做一次详细的解释. Memcheck命令行选项 –leak-check=<no| ...

最新文章

  1. Tomcat关闭后,重新启动,session中保存的对象为什么还存在解决方法
  2. Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决
  3. Nacos更新配置参数不生效
  4. 2-27 最短路径《啊哈算法》2-28完成四种算法
  5. python format 时间格式
  6. scp连接linux网络错误,winscp连接linux(centos7)时提示主机超过15秒无通信,继续等待的解决方法...
  7. sin查找表 matlab,FPGA利用查找表实现sin正弦函数
  8. java 插件开发教程_Eclipse插件开发的详细教程
  9. oeasy教您玩转vim - 39 - # 剪切粘贴
  10. Mysql中date和datetime的区别
  11. vc 写一个计算机功能,VC++的一个实例
  12. TensorFlow中的通信机制——Rendezvous(一)本地传输
  13. 突破体系结构的错误–当Dreamliner成为噩梦时
  14. WebRTC中的信令和内网穿透技术 STUN / TURN
  15. 利用Python画一只小猪佩奇
  16. efm8系列单片机c语言编程,EFM8单片机用Keil编程,头文件怎么写?
  17. ubuntu qt creator编译出现:-1: error: Warning: File ' has modification time 3.8e+04 s in the future
  18. matlab可以拟合分段函数吗,如何用matlab拟合出分段函数
  19. Java打印程序设计全攻略
  20. 为什么RPA机器人会广泛应用于财务管理领域?

热门文章

  1. 网易云信详解B2B企业借力敏捷营销的高增长之道
  2. [译] 关于Angular的变更检测(Change Detection)你需要知道这些
  3. 20170204-py
  4. Win10桌面右键响应非常慢怎么办?
  5. HDU1164 Eddy's research I【素因子分解】
  6. How to install MinGW-w64 and MSYS2?
  7. MongoDB查询(上)
  8. wordpress启动初始化过程
  9. 微软北大联合提出换脸AI和脸部伪造检测器,演绎现实版「矛与盾」?
  10. 解决因为http_proxy代理导致的git clone失败的问题:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to xxx:443