在命令行环境下,执行已编译的程序时,将命令行参数以同一行的附加参数的形式传入到要执行的程序中。C编译器允许main()函数没有参数,或者有两个参数(也有可能更多,是对标准的扩展)。一般形式为“int main(int argv;char* argv[])”,其中第一个参数argc代表命令行中字符串个数(系统以空格作为一个字符串结束的标志);第二个参数*argv[]是一个字符指针组成的数组或者是一个指向字符串的指针数组,命令行的每一个字符串被存储到内存中,并且分配一个指针指向它,这些指针即构成第二个参数。

编写一个程序:

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){int i,times,count;if(argc < 2)printf("Note : %s should follow your name and a positive-number\n",argv[0]);else if(argc < 3 || (times = atoi(argv[2])) < 1)printf("Note : %s %s should follow a positive-number\n",argv[0],argv[1]);elseprintf("Implementation success!\n");for(i = 0; i < times; i++){printf("Hello, %s!\n",argv[1]);}return 0;

编译并执行:

600*400

在这个简单的程序中,虽然以数字作为命令行附加参数,但是程序执行时这些参数是以字符串的形式存储的,因此用到了C标准库函数atio(),它是以字符串作为参数,返回相应的整数值,即完成字符串到整数的转换。需要注意的是,字符串若是以整数开头,但整数之后跟有其他字符,atio()函数仍然可以正常返回之前读取的整数值。但是字符串中不是以整数开头(字符串中无整数以及字符串中有整数但不是位于开头位置),函数则返回一个0。

接下来,我们利用命令行传入参数的方法,进行文件操作实例。创建一个新的文件fupenzi.txt。代码文件create_file.c如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main(int argc,char* argv[]){char name[40];FILE *new_file;strcpy(name,argv[1]); //拷贝传入的第一个字符串到定义的数组中,限定传入字符串长度为39,该字符串将作为文件名;new_file = fopen(name,"w"); //打开以命令行参数命名的文件并清空内容,若是不存在该文件则重新建立之;fclose(new_file);//关闭文件;return 0;
}

执行结果:

C程序中也经常需要命令行传参,常见于Linux C/C++应用软件,写一个典型的命令行参数解析demo,对命令行的参数进行解析后执行相关操作。

#include <ctime>
#include <string>using namespace std;string inFile, outPath, fileName;
float fileSize;void soft_tag()
{time_t raw_time;struct tm *time_info;time(&raw_time);time_info = localtime(&raw_time);cout << "[Info]" << __DATE__ << __TIME__ << endl;cout << "[time]" << actime(time_info);
}void print_help_info()
{cout << "parameter description:" << endl;cout << "-i " << "input file." << endl;cout << "-o " << "output path of file." << endl;cout << "-m " << "name of file." << endl;cout << "-s " << "size of file." << endl;cout << "-h " << "print help info." << endl;
}int parse_cmd_args(int argc, char * argv[], int *para_in, int *para_out, int *para_main, int *para_size)
{enum para_state {PARA_NON, PARA_IN, PARA_OUT, PARA_MAIN, PARA_SIZE};int is_state = PARA_NON;for (int i = 1; i < argc; ++ i){string paraWord(argv[i]);int flg = 1;if (0 == paraWord.compare("-h")){print_help_info();exit(0);}if (0 == paraWord.compare("-m"))is_state = PARA_MAIN;else if (0 == paraWord.compare("-i"))is_state = PARA_IN;else if (0 == paraWord.compare("-o"))is_state = PARA_OUT;else if (0 == paraWord.compare("-s"))is_state = PARA_SIZE;elseflg = 0;if (flg) continue;switch(is_state){case PARA_IN :if (0 == access(argv[i], 0)){*para_in = 1;inFile.assign(argv[i]);}break;case PARA_OUT :*para_out = 1;outPath.assign(argv[i]);break;case PARA_MAIN :*para_main = 1;fileName.assign(argv[i]);break;case PARA_SIZE :*para_size = 1;fileSize = atof(argv[i]);break;default:break;}return 0;}int main(int argc, char *argv[])
{soft_tag();int para_in = 0, para_out = 0, para_main = 0, para_size = 0;parse_cmd_args(argc, argv, para_in, para_out, para_main);if (para_in)cout << "input file: " << inFile << endl;if (para_out)cout << "output path: " << outPath << endl;if (para_main)cout << "file name: " << fileName << endl;if (para_size)cout << "file size: " << fileSize << endl;return 0;
}

Linux C程序命令行传参相关推荐

  1. shell脚本的命令行传参

    在Linux环境下开发C程序,若想要可选择性的给程序传递外部参数,最后是以启动脚本的形式间接进行传递,这样对于命令行的参数解析工作将集中到shell脚本中,大大增加C代码的可移植性.       sh ...

  2. Python 命令行传参

    Python 命令行传参 说到 python 命令行传参,可能大部分人的第一反应就是用 argparse.的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非 ...

  3. python3输入参数_python3 十一、命令行传参

    估计有很多小伙伴在linux系统上或win的doc中遇到没有UI页面的程序,只能通过命令行输入参数的形式去运行 那么python是怎么实现的呢? 熟悉python的小伙伴都知道python有个原生库 ...

  4. matlab读取txt数据绘图(python命令行传参)

    (1)命令行实现高斯分布 一:综述 Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Jav ...

  5. Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>

    什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...

  6. pytest命令行传参

    前言 命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在cmd执行"pytest --html=report.html",这里面的"--html=report ...

  7. argparse:Python命令行传参

    诸神缄默不语-个人CSDN博文目录 argparse模块(Python官方文档:argparse - 命令行选项.参数和子命令解析器 - Python 3.10.3 文档),可以用来在用命令行运行Py ...

  8. Day13-Java方法详解,方法的定义、重载,命令行传参,可变参数与递归

    Java方法详解 什么是方法? Java的方法是语句的集合,他们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法再程序中被创建,在其他地方被引用 [方法原子性]一个方 ...

  9. python使用argparse模块实现在终端命令行传参

    直接上代码 import argparse # 定义终端要传送的参数 parser = argparse.ArgumentParser(description="A description ...

最新文章

  1. 近世代数--群同构--第二同构定理
  2. 拦截导弹(二分匹配)
  3. Android笔记(七十) AlertDialog
  4. ARC106——E - Medals
  5. 字符串不替代_【数据挖掘】MySQL中的字符串数据类型
  6. php sizeof函数,sizeof()的简单介绍
  7. DBeaver执行SQL脚本文件
  8. 说“诡”道“诈”——解读“兵者,诡道也”+——文献综述
  9. Python打字练习小游戏源代码
  10. excel自动求和_如何在excel表格中求和 excel求和怎么操作
  11. 解决电脑蓝牙连不上问题
  12. MXNet网络模型(四)GAN神经网络
  13. go : go-redis 基础操作
  14. tp1900芯片对比7621a_MT7621A /MT7620N / MT7620A单频双频刷机教程(区别于高通芯片刷机过程)...
  15. docker-compose实现滚动更新
  16. WannaCrypt 防护补丁MS17-10
  17. LIO-SAM:点云预处理前端---畸变矫正数据预处理
  18. [SAS - TEMPLATE] ODS输出格式的定义一些小总结
  19. BPM软件_财务报销流程管理解决方案_K2工作流引擎
  20. 远程控制PLC? 带WiFi的PLC?可行!

热门文章

  1. MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
  2. python 删除list 里面的一个空集合
  3. Python import 的用法
  4. Python 列表List 的使用
  5. Only the original thread that created a view hierarchy can touch its views
  6. Glide 加载图片不显示(Android9.0无法加载图片)
  7. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
  8. linux常用命令(转载)
  9. 2022-2028年中国普鲁兰多糖行业市场分析及投资前景研究报告
  10. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园