[嵌入式 C 语言] int main(int argc, char *argv[])

news2024/9/20 12:39:21

一、含义 

        在C语言中,main 函数是程序的起点,也就是执行的入口点。main 函数可以接受命令行参数,并且通常定义如下:

int main(int argc, char *argv[])
  • int argc: 这个参数代表“参数计数”(Argument Count),表示传递给程序的命令行参数的数量,包括程序本身的名称。例如,如果你的程序名为 myprogram 并且你在命令行中输入 myprogram arg1 arg2,那么 argc 将为3。

  • char *argv[]: 这是一个字符指针数组,每个元素指向一个字符串。这些字符串是实际的命令行参数值。argv[0] 通常包含程序的名称(即调用程序的命令),而 argv[1]argv[argc-1] 包含其他所有参数。继续上面的例子,argv[0] 会是 "myprogram"argv[1] 会是 "arg1"argv[2] 会是 "arg2"

        假设我们有一个程序,它的目的是简单地打印出所有传递给它的命令行参数。我们将这个程序命名为 printarg 

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i;

    // 打印程序名和所有参数
    printf("Program name: %s, Argc num:%d\n", argv[0], argc);

    if (argc > 1) {
        printf("Arguments passed to the program:\n");

        // 遍历所有参数
        for (i = 1; i < argc; i++) {
            printf("%d: %s\n", i, argv[i]);
        }
    } else {
        printf("No additional arguments provided.\n");
    }

    return 0;
}

 要编译这个程序,你可以使用 gcc:

gcc -o printargs printargs.c

 然后,你可以通过命令行传递不同的参数来运行这个程序:

 ​​​​​​        可以看出 argv[0] 存的是文件名字,argv[1] 存的是输入的第一个参数的字符,argv[2] 存的是输入的第二个参数的字符,以此类推。而 argc 就是指参数的个数,只输入./printarg的时候,参数个数就为1了。

        还一个问题是我的输出缺少 #*8 参数,可能是由于某些特殊字符的处理问题或者环境配置问题。这是因为某些特殊字符可能会被 shell 解析。例如,# 可能会被当作注释符,但通常在命令行参数中不会有问题。* 可能会被 shell 解释为通配符。如果我的目录下有匹配的文件或目录,* 会被展开。   

为了排除这些问题,我们可以尝试以下方法: 

  •  使用引号将特殊字符括起来:
./printarg 1 2 3 arg4 acg5 q '#' '*8'
  •  或者使用转义字符 \ 来避免特殊字符被 shell 解释:
./printarg 1 2 3 arg4 acg5 q \# \*8

        确保这些特殊字符在传递给程序之前没有被 shell 修改或忽略。这样应该能够确保所有参数都被正确地传递给程序。

二、GDB调试

        如果我们直接gdb运行这个文件(这里代码和之前一样,只是文件名换了),可以看到程序会一直卡在 The program is not being run. 。这里因为我们是直接运行程序 ./uart_parser ,而没有带任何的参数。在GDB调试中带参数要用 run 命令,如下:

run 1 argc2   等价与   r  1 argc2 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验记录 | PointMLP | Grouping layer + Geometric Affine

引言 自 PointNet 腾空出世&#xff0c;点云分析的深度框架便成为了该领域的热点&#xff0c;点云学习网络的发展便一发不可收拾。和大部分深度网络一样&#xff0c;点云网络遵循着 “降采样&#xff0c;聚合特征” 的基本思路&#xff0c;逐步提取点云的深度特征。 大部分点…

【九芯电子】星空灯语音识别芯片方案选型——NRK3301

在快节奏的现代生活中&#xff0c;人们对于居家环境的舒适性与便捷性追求日益增强&#xff0c;而星空灯语音控制的技术诞生&#xff0c;正是这一追求下的智慧结晶&#xff0c;极大地提升了居住的愉悦感与科技感。 九芯NRK3301语音识别芯片‌被广泛应用于智能照明产品中&#xf…

【python因果推断库2】使用 PyMC 模型进行差分-in-差分(Difference in Differences, DID)分析

目录 使用 PyMC 模型进行差分-in-差分&#xff08;Difference in Differences, DID&#xff09;分析 导入数据 分析 使用 PyMC 模型建模银行业数据集 导入数据 分析 1 - 经典 22 差分-in-差分 (DiD) 分析 2 - 具有多个干预前后观测值的差分-in-差分 (DiD) 分析 使用 PyMC…

VSCode + Git的常规操作(一)【描述详细直白,小白一学就会】

目录 一、文章简介 二、具体操作流程 1、操作前提 2、设置用户名、用户邮箱 &#xff08;1&#xff09;打开命令框 &#xff08;2&#xff09;配置用户名 &#xff08;3&#xff09;配置用户名邮箱 &#xff08;4&#xff09;查看配置 3、SSH密钥对的介绍、生成及配置…

008、架构_MDS

​架构 什么是元数据 什么是元数据 元数据又称中介数据、中继数据,为描述数据的数据,主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能;GoldenDB 数据库元数据大致分为两类: 数据字典:库、表、字段属性信息、视图、函数、存储过程属…

【代码随想录训练营第42期 Day48打卡 - 单调栈 - LeetCode 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II

目录 一、做题心得 二、题目与题解 题目一&#xff1a;739. 每日温度 题目链接 题解1&#xff1a;暴力--超时 题解2&#xff1a;单调栈 题目二&#xff1a;496.下一个更大元素 I 题目链接 题解&#xff1a;单调栈哈希 题目三&#xff1a;503.下一个更大元素II 题目链…

神经网络训练不起来怎么办(五)| Batch Normalization

Ⅰ&#xff0c;领域背景 训练困境&#xff1a;当 input feature 在不同 dimension 上差距很大的时候&#xff0c;会产生一个非常崎岖的 error surface&#xff08;误差平面&#xff09;。这种崎岖多变的误差平面容易导致训练陷入以下的几个困境。 收敛困难&#xff1a;在崎岖…

注释1111

3。3 Batch Normalization (BN) 的工作原理 Batch Normalization 是在处理一个 "批次" 数据时&#xff0c;计算这个批次内所有样本的平均值和方差&#xff0c;然后使用这些统计量对每个样本进行归一化。这就是说&#xff1a; 批次&#xff08;batch&#xff09;&a…

局部整体(五)利用python绘制旭日图

局部整体&#xff08;五&#xff09;利用python绘制旭日图 旭日图&#xff08; Sunburst Charts&#xff09;简介 由于其形状像太阳光由内向外辐射出来&#xff0c;所以叫SunBurst(太阳爆发)&#xff0c;中文也叫日出图。是多个层级的环图/饼图的拓展&#xff0c;可以显示多个…

GNU的编译工具链

文章目录 GNU的编译工具链 GNU的编译工具链 预编译器cpp 编译器 cc1 汇编器 as 链接器 ld 其中cpp和cc1属于gcc的一部分&#xff0c;as和ld属于binutils的一部分。

MySQL-如何定位慢查询

慢查询&#xff1a;页面加载过慢&#xff0c;接口压测响应时间过长&#xff08;超过1s&#xff09;

STM32基础篇:PWR

PWR简介 PWR&#xff08;Power Control&#xff09;&#xff0c;为电源控制模块&#xff0c;负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能。 1、可编程电压监测器 简称PVD&#xff0c;可以监控VDD电源电压。当VDD下降到PVD阀值以…

yum安装nexus3详细教程分享

创建nexus用户&#xff0c;类似于这种中间件&#xff0c;尽量做到专户管理&#xff0c;当然如果你喜欢直接用root权限安装&#xff0c;更改配置文件也是可以支持的。但是实际上大多情况下&#xff0c;在生产环境是拿不到root权限的。 useradd -m nexus为nexus用户设置密码 pass…

AS-V1000视频监控平台客户端播放实时视频时,一些视频画面显示的时间不准确的解决方法

目录 一、背景说明 二、解决过程 1、查看设备时间 2、查看服务器时间 3、ntp介绍 1) ntp的概念 2) ntp的同步方式 3) ntp的优势 4、自动校准服务器和设备时间 1) 下载ntp 2) 修改ntp.conf 3) 重启ntp服务&#xff0c;自动校准时间 4) 国标重新接入设备自动同步时间 三、问题解…

zStorage在海光CPU架构上的性能调优

前言 随着"信创"的东风吹遍大江南北&#xff0c;各家公司都开始了国产化的适配道路。zStorage团队当然也没有缺席&#xff0c;去年我们适配了华为的鲲鹏架构&#xff0c;整体性能水平达到了Intel架构的70%以上。今年我们开始着力于海光CPU架构的适配。与鲲鹏架构相比…

【linux学习指南】权限管理与文件访问设置方法

文章目录 &#x1f4dd;前言&#x1f320; bc指令&#x1f309;uname –r指令 &#x1f320;重要的几个热键[Tab],[ctrl]-c, [ctrl]-d&#x1f309;关机 &#x1f320;命令扩展&#x1f309;shell命令以及运行原理 &#x1f320;Linux权限的概念&#x1f320; Linux权限管理&am…

善用工具:开发与效率

文章目录 常用工具Visual Studio Code&#xff08;VS Code&#xff09;GitDockerPostman 效率对比VS Code 与 Sublime TextGit 与 SVNDocker 与虚拟机Postman 与 cURL 近来趋势人工智能与编程工具的结合低代码与无代码平台版本控制的演进准备自适应的开发环境与新兴技术的整合 …

Linux驱动(三):字符设备驱动之杂项

目录 一、Linux设备分类二、设备号与字符设备的编码方式1.设备号2.字符设备的编码方式 三、杂项字符设备驱动的初级编写 一、Linux设备分类 Linux下一切皆文件&#xff0c;所有的硬件设备在Linux应用层中都会被抽象成文件&#xff0c;所有对硬件设备的操作到应用层中&#xff0…

电脑垃圾箱删除的东西怎么找回来?介绍四个有效方法

在日常使用电脑的过程中&#xff0c;‌我们可能会不小心删除一些重要文件&#xff0c;‌而这些文件往往会被放入垃圾箱&#xff08;‌回收站&#xff09;‌。‌但有时候&#xff0c;‌我们可能会清空垃圾箱&#xff0c;‌导致这些文件看似永久丢失。‌其实&#xff0c;‌即使垃…

RFID光触发标签在汽车制造行业的深度应用

汽车制造行业作为现代工业的重要支柱&#xff0c;面临着日益激烈的市场竞争和不断提高的客户需求。传统的汽车制造管理方式在生产过程监控、零部件管理、质量追溯等方面存在诸多不足&#xff0c;而 RFID 光触发标签技术的出现为汽车制造行业的转型升级提供了有力的解决方案。 …