C语言main的参数;argc与argv

目录

前言

什么是命令行参数

argc与argv

argc (Argument Count)

argv (Argument Vector)

示例


前言

在C语言中,main函数的标准形式通常有两种:

cpp 复制代码
int main(void)

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

其中,**argcargv 是用于处理命令行参数的两个重要参数。**本文将详细解释它们的含义和用法。

argc与argv

argc (Argument Count)

  • argc 是一个整数,表示传递给程序的命令行参数的数量。

  • 它至少为1,因为第一个参数总是程序的名称(即 argv[0])。

  • 例如,如果用户在命令行中输入 ./my_program arg1 arg2,那么 argc 的值将是3。

argv(Argument Vector)

  • argv 是一个指向字符指针的数组,每个指针指向一个字符串,表示一个命令行参数。

  • argv[0] 是程序的名称。

  • argv[1]argv[argc-1] 是传递给程序的实际参数。

  • argv[argc] 是一个空指针(NULL),表示参数列表的结束。

什么是命令行参数

命令行参数​(Command-Line Arguments)是在启动程序时通过命令行界面传递给程序的输入参数,通常由程序名称和参数列表组成,例如:

bash 复制代码
./my_program arg1 arg2 arg3

其中"./my_program"是程序名称;"arg1 arg2 arg3"是参数列表。

参数列表打印示例

示例代码

cpp 复制代码
#include <stdio.h>

int main(int argc, char *argv[]) {
    //打印参数个数
    printf("Number of arguments: %d\n", argc);
    //打印参数列表
    for (int i = 0; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
    
    return 0;
}

示例运行

bash 复制代码
./my_program arg1 arg2 arg3

示例输出

bash 复制代码
Number of arguments: 4
Argument 0: ./my_program
Argument 1: arg1
Argument 2: arg2
Argument 3: arg3

命令行参数作用何在?

有了命令行参数的存在,用户就可以在运行程序时指定某些选项,从而使程序根据不同的输入执行不同的操作。

我举个好理解的例子:输入参数1就是会员身份运行程序,里面会多很多功能,输入参数2就是以会员身份运行程序,许多功能使用受限制。

利用命令行参数指定程序功能示例

cpp 复制代码
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    //输入的参数不符合要求,提示输入要求后直接退出运行
    if (argc != 2)
    {
        printf("Usage:\n\t%s -number[1-2]\n", argv[0]);
        return 1;
    }
    //输入参数1,执行第一种功能
    if (strcmp("-1", argv[1]) == 0)
    {
        printf("function 1\n");
    }
    //输入参数2,执行第二种功能
    else if (strcmp("-2", argv[1]) == 0)
    {
        printf("function 1\n");
    }
    //输入的参数不符合要求,提示输入要求后直接退出运行
    else
    {
        printf("unknown!\n");
        printf("Usage:\n\t%s -number[1-2]\n", argv[0]);
        return 1;
    }

    return 0;
}
相关推荐
老鼠只爱大米3 分钟前
LeetCode经典算法面试题 #199:二叉树的右视图(BFS双队列法、DFS递归法等多种实现方案详细解析)
算法·leetcode·二叉树·dfs·bfs·深度优先搜索·右视图
若风的雨4 分钟前
NCCL (NVIDIA Collective Communications Library) 中重要 API 的总结表
linux
历程里程碑5 分钟前
子串-----和为 K 的子数组
java·数据结构·c++·python·算法·leetcode·tornado
一起养小猫6 分钟前
Flutter for OpenHarmony 进阶:表达式解析算法与计算器核心实现
算法·flutter·harmonyos
池央12 分钟前
贪心-最长递增子序列
算法·贪心算法
We་ct17 分钟前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
不懒不懒28 分钟前
【逻辑回归从原理到实战:正则化、参数调优与过拟合处理】
人工智能·算法·机器学习
一只大袋鼠28 分钟前
分布式 ID 生成:雪花算法原理、实现与 MyBatis-Plus 实战
分布式·算法·mybatis
j_xxx404_30 分钟前
Linux:自主shell命令行解释器附源码
linux·运维·服务器
tobias.b31 分钟前
408真题解析-2010-27-操作系统-同步互斥/Peterson算法
算法·计算机考研·408真题解析