argc 和 *argv[] 的有趣讲解和小方法

本方法使用 windows 进行讲解。

我不懂什么专业术语,就个人感觉来说。

开门见山  当我们看到 以下程序的时候 我们会发现 argc 和 *argv[]  (第一眼观察就可以知道的是 argc是整型,argv是一个可以接收二维数组的二级指针)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;

int main(int argc,char* argv[]) {  // 看这行 不要看其他的先。 

	cout << argc << endl;
	puts(argv[0]);
	puts(argv[1]);
	system("pause");
	return 0;
}

我们为了知道 这两个变量是干啥的,当然需要实践--运行程序  试探一下才知 是驴是马。话不多说 运行!!

 

不好意思 它报错了!!!但是这正是切入 正题最重要 和不可缺少的一次试探。

为什么呢?继续试探!

我们把视线ka看到 监视1 窗口 也就是 报错框下面的 debug 变量窗口。我们首先看见的就是 NULL 对于写程序多的人来说 NULL引发错误并不少见。点开argv[1] 左侧的jian箭头 我们看见的是  <无法读取内存> 6个大字,所以我们 puts(argv[1]) 失败是必然的情况。

都说了知错要改 但是这次不一样 我们要想方设法 使它合法 ,所以我忽略错误 使用 g++ 编译器 编译。我们看编译以后的文件是长这(niao)样:

要是问我 我看见什么 我肯定会说 为什么搞了个快捷方式!!对!感觉很对!这次就是用 快捷方式 来讲解。(命令行 等会,这不排队嘛! 急什么)

我不兜圈子,我就直接说:要使得 puts(argv[1]); 合法 可以这么做 

1.快捷方式 右键 点 属性 然后看见下面这个框

2.我们在 目标那里 (喂 看到 目标 哪里了吗?? 第一个编辑框就是了咯~)

我们拉到最后  (怎么拉 你看图就知道到了)

3.我们空一格 然后试探地输入 A  然后点击应用(不会又看不到 应用按钮吧!在你后面) ,先不要关闭这个属性窗口。

改完是这个样子的。

4.我们不关闭 这个属性窗口(为什么?因为我们还要用啊!你要关闭也行,一会再开)

我们双击 那个快捷方式 试试看。

是 A 是 A 。。。。  同时发现 刚才第一行的 1 变成了 2 . 

这下傻子都会明白了  刚刚 1 的时候 输出puts(argv[0]) 把 C:\Users\!ZERO\source\repos\Project10\Project10\源.exe

正常输出 程序路径

(如果细心一点 你会发现 为什么 第一次和第二次的的 程序路径好像不一样)

。。。。因为 你没认真看我文章 我说过我拿的是g++来编译的 原来那个是 VS bi'a编译的文件压根就不在一起。

注意到程序输出 2 以后,我们再次修改属性内容 如下

记得改完点 应用。

我猜 一会它 变成 3 你信不信! 好的 它成 3 了 一点都不神奇。 

这下我们知道了 argc == 1 的时候只能输出 可以一个字符串 argc == 2 可以输出两个字符串  现在我没告诉你们 argc == 3 输出几个字符串。我也不会告诉你们了。你们就迷茫吧!! 但是我说 argc==10的时候 可以输出 10个字符串。(*argv[])

好的 我想说的是 等命令行的同学 可以走了 我是不会告诉你用命令行让argc变成2 的。

 

 

那只道这些 有什么卵用呢 ?

没有。你可以关闭这个页面了 顺便说一下我喜欢骚粉 !最后再告诉你 快捷方式的后缀名称是 .lnk 大写是 .LNK 当然还可以不大不小写 .LnK .lNK Lnk .lNk ```` (你能分辨大写的I(ai)和小写的l(L小写)) << 吗?;

 

利用以上方法 制作小工具 解决实际问题 

1.假使 我们 不是输入字符串 而是 一个程序的路径作为 *argv[] 的字符串传进 main 函数之后 能不能通过函数来打开这个程序。

假定这个程序是 QQ应用程序。

方法是 使用system(字符串);来执行。

来试一下: 我 们修改一下 程序

接着g++编译 .

接着 我们改一下那个快捷方式 的参数

同时告诉你们 用双引号引起字符串也行 这样可以支持空格字符串。

因为宿舍要熄灯了 我不能多扯淡了 马上运行给看看结果:

试想一下 如果我们 三个参数 并且 使用 system(); 也是可以运行的。

在想一下 如果 我的 system();这样写会怎么样  system(argv[0]); // 程序会自己yu运行自己??一切的一切还需你自己探索才行

好了 我讲完了。

 

                                                                                                                                                      我在山东来自海南

                                                                                                                                                      2018年8月31日 22点27分

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值