偶尔对main函数的参数感兴趣,写了个程序验证。

int main(int argc,char **argv)

首先,解释两点:

第一 、系统将参数列表,即我们在shell下输入的命令,存储到一个一维字符数组中,而且用户是可修改的,肯定没存在常量区。

第二 、argv实际上是一个char*argv[],字符指针数组,元素个数现在不清楚,至少有argc个,还有一些其他的,例如HOSTNAME,SELINUX_ROLE_REQUESTED,TERM,SHELL,HISTSIZE,SSH_CLIENT,SELINUX_USE_CURRENT_RANGE,QTDIR,QTINC,SSH_TTY,SVN_EDITOR等,

然后根据参数列表中的空格,划分各个参数,各个参数的首地址存储到argv[i]中,然后让*(argv[i]-1)=0,即用\0代替原来的空格,这样可以打印出各个参数。

下面贴出我的程序,大家可以自己试验一下。

/*argcargv.c*/

#include <stdio.h>

#include <string.h>

int main(int argc,char ** argv)

{

  int i;

  for(i=0;i<argc/*20,可以自己设定一个大于argc的值,看看argv到底有多少个元素*/;i++)

  {

    printf("%p,%s",argv[i],argv[i]);

    printf("$\n");

  }

  printf("\n");

  strcpy(argv[0],"meilidezhongguo,nihao!");

  for(i=0;i<argc,i++)

  {

    printf("%p,%s",argv[i],argv[i]);

    printf("$\n");

  }

  printf("\n");

}

程序运行: ./a.out abc 123 def 456 hello 789 world

我的电脑运行结果如下:

0xbff64758,./a.out$

0xbff64760,abc$

0xbff64764,123$

0xbff64768,def$

0xbff6476c,456$

0xbff64770,hello$

0xbff64776,789$

0xbff6477a,world$

(nil),(null)$

.......

.......

.......

.......

0xbff64758,meilidezhongguo,nihao!$

0xbff64760,hongguo,nihao!$

0xbff64764,guo,nihao!$

0xbff64768,nihao!$

0xbff6476c,o!$

0xbff64770,hello$

0xbff64776,789$

0xbff6477a,world$

也可以用

strncpy(argv[0],"meilidezhongguo,nihao!",28);

代替strcpy(argv[0],"meilidezhongguo,nihao!");

试试,

还可以看出strncpy,拷贝了22个字符,strlen("meilidezhongguo,nihao!");剩下额6个字符补上\0.

理解限制,只能补充这些,下次有了新理解,再完善!

关于main函数的参数,argc,argv的内部机制的更多相关文章

  1. main函数的参数argc和argv

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/20413773 该篇 ...

  2. (转)C++ main函数中参数argc和argv含义及用法

    原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...

  3. C++ main函数中参数argc和argv含义及用法

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  4. C/C++基础:main函数的参数argc和argv

    转载: https://blog.csdn.net/Eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或in ...

  5. [C/C++基础知识] main函数的参数argc和argv

    该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...

  6. c语言main函数的参数argc,argv说明

    main函数参数argc,argv说明   C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...

  7. C语言中main函数的参数argc和argv

    参考资料: http://wiki.opencv.org.cn/index.php/Main%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0argc%EF%BC%8Cargv% ...

  8. main()中的参数argc, argv

    转自:http://blog.csdn.net/eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或int ...

  9. Main函数中的参数argc,argv的使用简单解析

    本篇文章是对Main函数中的参数argc,argv的使用进行了简单的分析介绍,需要的朋友参考下: C/C++语言中的main函数,经常带有参数argc,argv,如下:  int main(int a ...

随机推荐

  1. D. Minimum Diameter Tree Round #528 (Div. 2)【树】

    一.题面 题目链接 二.分析 该题注意读题的时候有强调边的权值为非负(即可以为0),此题就是求树两个叶子节点之间的最短距离.为了使两个叶子节点之间的距离最短,那么其实就是让每个最后到叶子的那条路径尽量 ...

  2. Flask之flask-script 指定端口

    简介 Flask-Scropt插件为在Flask里编写额外的脚本提供了支持.这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库.定时任务和其他属于web应用之外的命令行任务的 ...

  3. vue控制父子组件渲染顺序

    在父组件中,如下图渲染子组件,那如何在父组件中加入一些数据获取逻辑且能控制子组件渲染呢. 就是像在上图中红框圈起来的那样,挂个 ok(其他你自己定义的也可以) 参数,同时在父组件的任何生命周期中去改变 ...

  4. ZOJ - 3623 完全背包变种

    题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #in ...

  5. JDK安装以及maven部署

    JDK安装 检查原有JDK rpm -qa|grep jdk 假如原环境安装有JDK,卸载,命令举例: yum -y remove java--openjdk-headless-.b17.el7.x8 ...

  6. EntityFramework CodeFirst 数据库迁移

    参考: https://msdn.microsoft.com/en-us/data/jj591621 https://msdn.microsoft.com/en-us/library/dd394698 ...

  7. DataGuard具体搭建环节

    在上一篇blog中,详细介绍DataGuard实现的原理,本篇介绍DataGuard的具体搭建过程. 主库打开日志,并强制force logging SQL>shutdown immediate ...

  8. select 点击的时候获取 value值

    <select onchange="selectUrl1(this.options[this.options.selectedIndex].value);">      ...

  9. oracle 备份恢复篇(一)---rman

    一,rman介绍 RMAN(Recovery Manager)是随Oracle服务器软件一同安装的工具软件,它可以用来备份和恢复数据库文件.归档日志和控制文件,用来执行完全或不完全的数据库恢复.与传统 ...

  10. oracle 基础知识(四) 构成

    一, oracle服务 一个oracle 服务由一个oracle 实例和一个oracle数据库组成. oracle = instance + database 总体概念: 二, oracle 实例 0 ...