首页 > 其他分享 >C语言main函数的参数

C语言main函数的参数

时间:2022-11-22 16:02:14浏览次数:47  
标签:argc 函数 程序 argv C语言 参数 printf main


文章目录

  • ​​一、main函数的参数​​
  • ​​二、C程序的规范写法​​
  • ​​三、envp参数​​
  • ​​四、课后作业​​
  • ​​五、获取视频教程​​
  • ​​六、版权声明​​


程序运行的时候,有些需要带参数,有些不带参数,例如linux操作系统的命令,它们本质上就是C程序。

1)Linux命令中,无参数的不多。

pwd  #显示当前目录
clear #清屏

2)大部Linux命令是带参数的。

cp  book1.c book2.c
mkdir /tmp/dname
mv book3 /tmp/dname/book3
rm -rf /tmp/dname

各位现在是在C语言学习的初级阶段,编写的C程序非常简单,运行不需要参数,但是在实际开发中,main函数一般都需要参数,没有参数的情况极少。

main函数的参数是从命令提示符下执行程序的时候传入,例如ls 命令。

C语言main函数的参数_c语言

在以上示例中ls命令有两个参数,-l和book1?.c。

一、main函数的参数

main函数有三个参数,argc、argv和envp,它的标准写法如下:

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

int argc,存放了命令行参数的个数。

char *argv[],是个字符串的数组,每个元素都是一个字符指针,指向一个字符串,即命令行中的每一个参数。

char *envp[],也是一个字符串的数组,这个数组的每一个元素是指向一个环境变量的字符指针。

envp先放一下,先讲argc和argv。

示例(book101.c)

/*
* 程序名:book101.c,此程序演示main函数的参数。
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[])
{
int ii=0;

// 显示参数的个数
printf("argc is %d\n",argc);

// 列出全部的参数
for (ii=0;ii<argc;ii++)
{
printf("argv[%d] is %s\n",ii,argv[ii]);
}
}

运行结果

C语言main函数的参数_c语言_02

注意几个事项:

1)argc的值是参数个数加1,因为程序名称是程序的第一个参数,即argv[0],在上面的示例中,argv[0]是./book101。

2)main函数的参数,不管是书写的整数还是浮点数,全部被认为是字符串。

3)参数的命名argc和argv是程序员的约定,您也可以用argd或args,但是不建议这么做。

二、C程序的规范写法

先假设程序执行都是有参数的,也就是说main函数都有参数,那么使用者怎么知道程序的参数个数和含义,记住它?看使用手册?不是,优秀的程序员会在程序中提供说明文字。我们先来看一个例子。

示例(book103.c)

/*
* 程序名:book103.c,此程序演示main函数的参数。
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[])
{
if (argc!=6)
{
printf("\n这是一个超女选秀程序,根据提供的超女信息,判断"\
"她是否符合王妃的标准。\n\n");
printf("用法:./book103 name age height sc yz\n");
printf("例如:./book103 西施 22 170 火辣 漂亮\n");
printf("name 超女的姓名。\n");
printf("age 超女的年龄。\n");
printf("height 超女的身高,单位:cm。\n");
printf("sc 超女的身材,火辣;普通;飞机场。\n");
printf("yz 超女的颜值,漂亮;一般;歪瓜裂枣。\n\n");

return -1;
}

printf("您输入的超女信息是:姓名(%s),年龄(%s),身高(%s),身材(%s),颜值(%s)。\n",\
argv[1],argv[2],argv[3],argv[4],argv[5]);

printf("正在计算中,请稍候......\n");

if (((atoi(argv[2]) >= 20) && (atoi(argv[2]) <= 30)) && // 年龄在20-30之间
((atoi(argv[3]) >= 165) && (atoi(argv[3]) <= 175)) && // 身高在165-175之间
((strcmp(argv[4],"火辣")==0) ) && // 身材火辣
((strcmp(argv[5],"漂亮")==0) )) // 颜值漂亮
{
printf("超女(%s)选秀合格,送往后宫。\n",argv[1]); return 0;
}
else
{
printf("超女(%s)选秀不合格,发放五两银子后送回家。\n", argv[1]); return 0;
}
}

运行程序的时候,如果参数不符,运行效果如下。

C语言main函数的参数_数组_03

如果参数个数相符,运行效果如下。

C语言main函数的参数_main函数_04

从以上的例子可以看出,如果执行程序的时候提供的参数与设计不符,显示程序的使用说明,说明文字应该包括程序的功能和全部参数的解释,还可以包括作者、联系方式等更详细的信息。

程序的使用说明文字非常重要,有几个原因:

1)程序的使用者不一定会写程序,也没必要去查使用手册等资料;

2)程序的使用者就算会写程序,也没必要在使用的时候去看源代码,并且,您也不一定想让他看到源代码;

3)如果程序的使用者是您自己,时间一长,您也会忘记程序的参数。

当然,这些只是程序员的约定,不是C语言的规定。

三、envp参数

envp存放了当前程序运行环境的参数。

示例(book105.c)

/*
* 程序名:book105.c,此程序用于演示当前程序运行环境的参数envp。
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[],char *envp[])
{
int ii = 0;

while (envp[ii] != 0) // 数组最后一个元素是0
{
printf("%s\n",envp[ii]); ii++;
}
}

运行效果

C语言main函数的参数_c语言_05

注意了,book105运行的结果与linux系统的env命令相同。

在实际开发中,envp参数的应用场景不多,各位了解一下就行了。

作者:码农有道

标签:argc,函数,程序,argv,C语言,参数,printf,main
From: https://blog.51cto.com/u_13748800/5878212

相关文章

  • C语言指针
    1、指针定义  指针是一个变量,它保存的是另一个变量的地址,即​​内存​​位置的直接地址。intptr;//整型变量,ptr+1表示变量值+1;constintptr;//只读变量,和intcon......
  • C语言把浮点数转换为二进制数的方法和示例
    文章目录​​1、整数部分转二进制字符串的方法​​​​2、小数部分转二进制字符串的方法​​​​3、示例程序​​​​4、获取视频教程​​​​5、版权声明​​浮点数据转换......
  • C语言三目运算符
    文章目录​​1、三目运算符​​​​2、获取视频教程​​​​3、版权声明​​1、三目运算符三目运算符也叫条件运算符、三元运算符,是由一个问号和一个冒号组成。语法:表达式1?......
  • PostgreSQL常用字符串分割函数整理记录
    记录一下postgresql字符串切割处理的函数1.SPLIT_PARTSPLIT_PART()函数通过指定分隔符分割字符串,并返回第N个子串。语法:SPLIT_PART(string,delimiter,position)st......
  • 下载go源码时,遇到git - error: RPC failed; curl 18 transfer closed with outstandin
    执行下条语句时,出现该错误gitclonehttps://go.googlesource.com/go解决方案:gitconfig--globalhttp.postBuffer524288000......
  • Golang常用的工具函数,无依赖,常更
    util.go//Executef()ntimesonfailfuncRetryHandler(nint,ffunc()(bool,error))error{ok,er:=f()ifok&&er==nil{returnnil}ifn-1>0......
  • TM4C123G学习记录(4)--关于ROM前缀函数和HWREG函数
    为了准备电赛临时学一下TM4C123G,简单记录学习内容大家可以在​​这里​​下载我收集的资源,非常全面,花了很大功夫收集来的,还有书籍、例程代码等还可以在TI官网下载相关文档​......
  • 多元函数泰勒展开与黑塞矩阵
    文章目录​​1.引入:函数展开​​​​2.泰勒展开​​​​2.1一元函数泰勒展开​​​​2.2二元函数泰勒展开​​​​2.3n元函数泰勒展开​​​​3.黑塞矩阵(海森矩阵)​​......
  • 【C++】使用boost库的split函数分割字符串
    1#include<iostream>2#include<vector>3#include<boost/algorithm/string.hpp>45intmain(constintargc,constchar*argv[])6{7std::vect......
  • 自定义函数
    FIREDAC可以自定义sqlite的函数,方法如下:首先需要一个控件:TFDSQLiteFunction,其设置如下:sqlFunction.DriverLink:=FDPhysSQLiteDriverLink1;sqlFunction.FunctionName......