C语言中的argc argv是干什么的

本文深入解析了C/C++中main函数的参数int argc和char *argv[]的作用与使用方法,并通过示例展示了如何获取和处理命令行参数。
像Turbo c++、VC++这些现成编译环境  可以不用理解这些
argc,argv 那是用命令行编译程序时就有用

主函数main中变量(int argc,char *argv[ ])的含义

我们平时定义主函数时通常的写法为:int main( )或void main( )

其实,int main( ) 只是 UNIX 及 Linux 默许的用法,
main(int argc, char *argv[ ], char *env[ ])才是UNIX和Linux中的标准写法。

* argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数 

* argv: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数 
  argv[0] 指向程序运行的全路径名 
  argv[1] 指向在DOS命令行中执行程序名后的第一个字符串 
  argv[2] 指向执行程序名后的第二个字符串 
  ... 
  argv[argc]为NULL。

*env:字符串数组。env[ ]的每一个元素都包含ENVVAR=value形式的字符
串。其中ENVVAR为环境变量,value 为ENVVAR的对应值。

argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。

经典小例子,对于理解argv[ ]函数很管用:
#include <stdio.h>;

int main(int argc, char *argv[ ])
{
  printf("%d/n",argc);
  while(argc)
  printf("%s/n",argv[--argc]);
  return 0;
}

假设将其编译为test.exe

在命令行下
〉test hello
得到的输出结果为
2
hello
test

main(int argc, char*argv[ ]),其中argc是指变量的个数,本例中即指test和hello(注意,命令test也算在内)这两个变量,argc即为2

argv是一个char *的数组,其中存放指向参数变量的指针,此处argv[0]指向test,argv[1]指向hello

再例:
#include<unistd.h> 
#include<stdio.h> 

int main(int argc,char *argv[ ]) 
{ 
  if(argc==1 || argc>2) 
  {printf("请输入想要编辑的文件名如:fillname");} 
  if(argc==2) { printf("编辑 %s/n",argv[1]); } 
  exit(0) 
} 

编译该程序:gcc -o edit edit.c 
运行:〉edit 
结果:请输入想要编辑的文件名如:fillname 
运行:〉edit f1.txt 
结果:编辑 f1.txt 

执行edit时,argc为1,argv[0]指向edit
而执行edit f1.txt时,argc的值为2,argv[0]指向edit,argv[1]指向f1.txt
<think>嗯,用户想知道C语言argcargv的含义。这个问题很基础,正好之前有5篇关于这个主题的引用材料可以参考。 用户似乎是个C语言初学者,因为ta在明确询问这两个参数的基本含义。从引用内容来看,可以提炼几个关键点:argc是参数计数器,argv是参数字符串数组;argv[0]固定是程序路径名;这两个参数用于命令行参数传递。引用1和引用4对定义解释得很清楚,引用2和引用3则提供了直观的代码示例。 在准备回答时需要特别注意几点:要用最简单直白的语言解释概念;必须展示典型的main函数声明;要给出完整的代码示例说明参数如何遍历;最后要强调命令行执行时的具体用法。用户给的引用5内容不太相关,可以忽略。 突然想到初学者常混淆的点:为什么命令行参数从argv[1]开始?argv[0]有什么用?这些应该在回答中特别说明。另外引用3那个打印程序名的例子很典型,可以借鉴。对了,还要提醒用户参数都是字符串类型,需要自己转换数值——这是实际编程时容易踩的坑。 示例代码部分,引用2和引用3都有完整可运行的例子,但引用3的格式更规范。准备采用引用3的代码框架,加上中文注释会更友好。执行示例部分要展示Windows和Linux两种命令行调用方式,因为路径表示不同。 最后考虑补充两个实用提示:参数合法性检查的重要性,以及Windows系统拖拽文件到exe时会产生包含空格的路径参数。这些实际经验对用户应该很有帮助。 </think>在C语言中,`argc`和`argv`是`main`函数的两个关键参数,用于接收和处理命令行输入。以下是详细解析: --- ### **1. 定义与作用** - **`argc`**(argument count) 表示命令行参数的数量(包含程序名本身),类型为整型。 例如:执行 `./my_program arg1 arg2` 时,`argc = 3`(程序名 + 2个参数)[^1][^3][^4]。 - **`argv`**(argument vector) 指向字符串数组的指针,存储所有命令行参数的值: - `argv[0]`:程序自身的路径或名称(如 `./my_program`) - `argv[1]`:第一个实际参数 - `argv[argc-1]`:最后一个参数 - `argv[argc]`:固定为 `NULL`(数组结尾标志)[^2][^3][^4]。 --- ### **2. 典型用法示例** ```c #include <stdio.h> int main(int argc, char *argv[]) { printf("程序名称: %s\n", argv[0]); // 输出程序路径 printf("参数数量: %d\n", argc - 1); // 排除程序名后的实际参数数 for (int i = 1; i < argc; i++) { printf("参数 %d: %s\n", i, argv[i]); // 遍历所有命令行参数 } return 0; } ``` - **执行命令**: ```bash ./demo hello world ``` - **输出**: ``` 程序名称: ./demo 参数数量: 2 参数 1: hello 参数 2: world ``` [^2][^3][^4] --- ### **3. 关键细节** - **参数类型**:所有参数均以字符串形式传递(需自行转换数值类型)[^4]。 - **安全性**:必须检查 `argc` 值后再访问 `argv`,避免越界(如 `argc > 1` 才使用 `argv[1]`)[^3]。 - **特殊场景**: - Windows中拖放文件到可执行文件时,文件名会作为 `argv[1]` 传入(路径含空格需处理)[^4]。 - 无参数时,`argc=1`,`argv[0]`仍为程序名[^1]。 --- ### **4. 实际应用** 1. **配置程序行为**:通过参数指定运行模式(如 `-v` 开启调试模式)[^1]。 2. **文件处理**:传递输入/输出文件名(如 `compiler input.c output.exe`)[^4]。 3. **脚本工具**:接收用户输入的数值或指令(如计算器程序 `calc 5 + 3`)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值