关于main函数的参数,argc,argv的内部机制
偶尔对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的内部机制的更多相关文章
- main函数的参数argc和argv
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/20413773 该篇 ...
- (转)C++ main函数中参数argc和argv含义及用法
原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...
- C++ main函数中参数argc和argv含义及用法
argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...
- C/C++基础:main函数的参数argc和argv
转载: https://blog.csdn.net/Eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或in ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...
- c语言main函数的参数argc,argv说明
main函数参数argc,argv说明 C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...
- 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% ...
- main()中的参数argc, argv
转自:http://blog.csdn.net/eastmount/article/details/20413773 一.main()函数参数 通常我们在写主函数时都是void main()或int ...
- Main函数中的参数argc,argv的使用简单解析
本篇文章是对Main函数中的参数argc,argv的使用进行了简单的分析介绍,需要的朋友参考下: C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int a ...
随机推荐
- 去掉小程序button元素的边框
button::after { display:none }
- 误删除google浏览器用户,如何恢复之前收藏的标签,亲测有效
第一种方案: 看 路径 C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default 下或者 C:\Users\admin\AppData ...
- 对于position:relative,absolute,fixed的见解:
1.switch--fixed,div脱离父元素,top,left,right,bottom都是相对于body,自己原来的位置不存在,即不占父元素位置了 2.switch--relative,div相 ...
- RabbitMQ基础知识篇
1.Linux安装RabbitMQ. 参考网址:RPM安装RabbitMQ 仔细阅读. 先安装erlang: su -c 'rpm -Uvh http://mirrors.neusoft.edu. ...
- 用PHP实现同一个帐号不允许同时登陆,只允许一个帐号登录?
数据库表 user_login_info 字段:id,user_ip,user_id,last_access_time user_id 做唯一性索引 1. 用户登录后 如果没有当前用户的数据,插入一条 ...
- jQuery 文本插入和标签移动方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jqGrid -treeGrid 按需加载
Load Rows On Demand (AJAX) 参考:http://www.guriddo.net/demo/treegridjs/
- 使用网络技术---WebView
混合技术 1.使用WebView 权限声明: 定义WebView 填充网页: webView=findViewById() //启用js WebSetting seter = webView.sett ...
- 在 Azure Web 应用中创建 PHP 应用程序
本分步指南将通过 Azure Web 应用帮助您启动并运行示例 PHP 应用程序.除 PHP 外,Azure Web 应用还支持其他语言,如 Java..NET.Node.JS.Python.Ruby ...
- Hibernate=====HQL实用技术
Hibernate支持三种查询语言:HQL查询.Criteria查询和原生SQL查询 HQL(hibernate Query Language,hibernate查询语言)是一种面向对象查询语言,其中 ...