偶尔对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. 去掉小程序button元素的边框

    button::after {     display:none }

  2. 误删除google浏览器用户,如何恢复之前收藏的标签,亲测有效

    第一种方案: 看 路径 C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default  下或者 C:\Users\admin\AppData ...

  3. 对于position:relative,absolute,fixed的见解:

    1.switch--fixed,div脱离父元素,top,left,right,bottom都是相对于body,自己原来的位置不存在,即不占父元素位置了 2.switch--relative,div相 ...

  4. RabbitMQ基础知识篇

    1.Linux安装RabbitMQ. 参考网址:RPM安装RabbitMQ   仔细阅读. 先安装erlang: su -c 'rpm -Uvh http://mirrors.neusoft.edu. ...

  5. 用PHP实现同一个帐号不允许同时登陆,只允许一个帐号登录?

    数据库表 user_login_info 字段:id,user_ip,user_id,last_access_time user_id 做唯一性索引 1. 用户登录后 如果没有当前用户的数据,插入一条 ...

  6. jQuery 文本插入和标签移动方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. jqGrid -treeGrid 按需加载

    Load Rows On Demand (AJAX) 参考:http://www.guriddo.net/demo/treegridjs/

  8. 使用网络技术---WebView

    混合技术 1.使用WebView 权限声明: 定义WebView 填充网页: webView=findViewById() //启用js WebSetting seter = webView.sett ...

  9. 在 Azure Web 应用中创建 PHP 应用程序

    本分步指南将通过 Azure Web 应用帮助您启动并运行示例 PHP 应用程序.除 PHP 外,Azure Web 应用还支持其他语言,如 Java..NET.Node.JS.Python.Ruby ...

  10. Hibernate=====HQL实用技术

    Hibernate支持三种查询语言:HQL查询.Criteria查询和原生SQL查询 HQL(hibernate Query Language,hibernate查询语言)是一种面向对象查询语言,其中 ...