关于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 ...
随机推荐
- 求一个区间里的一个x,这个x与这区间里面的所有数都互质
链接:https://ac.nowcoder.com/acm/contest/301/H来源:牛客网 题描述 小乐乐上了一节数学课,数学老师讲的很好,小乐乐听的也如痴如醉. 小乐乐听了老师的讲解,知道 ...
- SiteServer CMS简介
SiteServer CMS 是中国在.NET平台下.强大的企业站开源CMS内容管理系统和网站群系统. 能够最低的成本.最少的人力投入在最短的时间内架设好一个功能齐全.性能优异.规模庞大并易于维护的网 ...
- C#串口编程 操作硬件
-------通过USB将硬件连接PC, 更新USB驱动,使用下面方法可控制相关设备. //1声明一个串口对象 public static SerialPort MainModule_Port_ = ...
- CI 框架中的日志处理 以及 404异常处理
最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...
- switch case 注意事项
switch case常见的注意事项: 1.case后面常量值的顺序可以任意,一般按顺序编写 2.default顺序也可以编写在switch中的任意位置 当所有case都不满足时则执行default ...
- Unity中Shader和AssetBundle结合使用的注意事项
之前遇到了一件事情就是打包安卓的ab后,unity在editor启动下,加载出来的abshader丢失,其实发布安卓后运行是正常的,当时还纠结了半天,还写了个重新赋值的脚本 下面是unity开发的一些 ...
- Markdown简易使用
Markdown 笔记 标题 1.一级标题 2.二级标题 3.三级标题 列表 这是 一个 无序列表 这是 一个 有序列表 引用 这是一条引用 图片与链接 图片 链接 Baidu 粗体与斜体 粗体 斜体 ...
- uwsgi服务启动、关闭、重启操作
1. 添加uwsgi相关文件 在之前的文章跟讲到过centos中搭建nginx+uwsgi+flask运行环境,本节就基于那一次的配置进行说明. 在www中创建uwsgi文件夹,用来存放uw ...
- Java工程路径及相对路径(转载)
3. 新建文件,默认位于工程目录new File("xxx.txt").getAbsolutePath();例如输出,D:\workspaces\workspace1\myProj ...
- java版两人聊天程序
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...