VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 594|回复: 4

[已解决]mai函数参数int argc与char argv,参数个数怎么确定的?

[复制链接]
53_avatar_middle
最佳答案
0 
donate_vip 发表于 2020-6-19 13:04:52 | 显示全部楼层 |阅读模式
平时写代码,main函数有两参数int argc和char argv,但是没看到参数在函数中使用,现在碰到了一段代码,用到了argc和argv,以前也是碰到过相应的资料,main函数第一个参数传递的是路径,但是第二第三参数,剩下的参数怎么确定的?现在有一段代码如下:
#include <Windows.h>
#include <stdio.h>

int main(int argc, PCHAR argv[])
{
      if (0 == lstrcmp(L"-d", (LPCWSTR)argv[1]) && argc == 3)                 ////-d参数,删除文件。
        {
                if (!DeleteFile((LPCWSTR)argv[2]))     {   printf("删除文件错误:%x\n", GetLastError());   }
                else                                                     {   printf("删除成功!\n");    }
        }
        else if (0 == lstrcmp(L"-m", (LPCWSTR)argv[1]) && argc == 4)                 //-c参数,复制文件。如果文件存在,询问用户是否覆盖
        {
                if (!MoveFile((LPCWSTR)argv[2], (LPCWSTR)argv[3]))    {    printf("移动文件错误:%d\n", GetLastError());   }
                else                                                                                 {   printf("移动文件成功!\n");    }
        }
        else{    printf("参数错误!\n");    }
}
为了好看,调整了格式。主要问题是:代码中用到的argc和argv怎么理解?argc和argv在前面都没有赋值,怎么就能argc==3运算?
最佳答案
70_avatar_small
2020-6-19 13:47:24
argc 是命令行参数的个数
argv[] 参数列表
其中argv[0] 是程序路径
vs 可以在 属性-> 调试 ->命令参数   里添加 ,  用空格分隔每个参数 ,这里输入的就是 argv[1]以及之后的参数
或者直接用cmd运行程序  : 程序名 + 空格 + 参数1 + 空格 +参数2......
程序会自动统计参数的总个数作为argc传入




上一篇:俺就问一下有什么方法就是像搭建服务器一样分享本地的html(文件?)
下一篇:如何获取文件图标
70_avatar_middle
最佳答案
49 
在线会员 发表于 2020-6-19 13:47:24 | 显示全部楼层    本楼为最佳答案   
bestAnswer
argc 是命令行参数的个数
argv[] 参数列表
其中argv[0] 是程序路径
vs 可以在 属性-> 调试 ->命令参数   里添加 ,  用空格分隔每个参数 ,这里输入的就是 argv[1]以及之后的参数
或者直接用cmd运行程序  : 程序名 + 空格 + 参数1 + 空格 +参数2......
程序会自动统计参数的总个数作为argc传入

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 学习了

查看全部评分

58_avatar_middle
最佳答案
58 
online_vip 发表于 2020-6-19 14:05:11 | 显示全部楼层
眼下就只需知道argc argv的用法就行,要知道原理还得学反汇编,PE,深入理解API。
在cmd中输入的参数,如>xxx.exe -a -b -c  argc会接收到参数的个数,参数分别是什么,会传入argv数组。
74_avatar_middle
最佳答案
7 
在线会员 发表于 2020-6-19 14:37:24 | 显示全部楼层
【总是别人帮助我,但是我好像没法帮助别人,有点不好意思,所以想尽点微薄之力。】
首先是对于控制台程序的理解,控制台程序我们会发现只是个黑色窗口,中心的操作就是读取、输出
其实不难发现,我们在打开自己的一个控制台应用程序的时候,窗口标题是这样的:
mai函数参数int argc与char argv,参数个数怎么确定的?
由此我们可以大致理解为,控制台程序是依附于命令提示符或者是Powershell运行的

那么,可能你会写过一些坑人小程序,比如
system("shutdown -s -t 0");
将括号里的字符串,输入到cmd里,系统会执行关机
shutdown其实就是一个控制台程序
那么问题来了

我们关机会有很多操作,比如说:立刻关机,定时关机,重启等
可我们只是输入shutdown,也就只运行了这个程序,无法进行我们想要的操作

所以就需要传入参数

argc是参数传入的数量,argv是参数传入的值(广义上的值,不是狭义的数值,由代码也就知道是字符串)
那么我们在进行操作的时候,只需要对参数数量进行判断,然后对应的去处理参数值即可
注意:如果你只输入了程序名,没有跟任何其他参数,参数数量会是1,即argc包括程序名,argv[0]==程序名

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分

53_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-6-20 08:40:15 | 显示全部楼层
谢谢,应该明白了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-29 14:17

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表