>> [音乐播放]
DAVID马兰：好的。
这是CS50，这 是2周结束。
我很抱歉，我不能 那里与你们的今天，
但你在非常良好的手中。
请允许我介绍 CS50自己的罗布·鲍登。
罗伯BOWDEN：当然，那 我们必须做出这样的事实乐趣
他给我们送来一个垂直 视频和显示此。
>> [视频回放]
>> [音乐播放]
>> [脚步声]
>> - 此视频也没有 要看看这种方式。
这本来是可以避免的。
说不垂直视频。
>> - 垂直视频发生在你 把你的相机走错了路。
您的视频将结束 看起来像废话。
>> - [咕噜咕噜]
>> - 有越来越多的人沉迷 每天做垂直视频。
它不开裂或没有， 但它仍然是非常糟糕的。
有两种不同类型的 人谁是患有VVS。
第一组对待 视频拍摄他们的照片一样。
他们并不意味着任何伤害。
他们只是不明白， 而你可以把图片，
你不能真正把一个视频。
>> [CRASH]
>> - [猴声音]
>> -The另一组是人 谁不给[哔]。
>> - 垂直视频综合症是危险的。
动态影像有 一贯水平。
电视水平。
电脑屏幕是水平的。
群众的眼睛是水平的。
我们不建 观看垂直视频。
>> - 我爱垂直视频。
>> -Nobody在乎你。
>> - 如果这个问题的 任其发展，你太
将开始显示四个视频 在一次只是为了节省带宽。
>> -Letterboxed垂直视频会 是一个邮票大小。
>> - 和它会到处蔓延。
电影屏幕有 一贯水平。
如果垂直视频成为 接受，电影院
必须是又高又瘦。
>> - 和所有的电影院会 必须让拆掉重建。
而到了时候，他们被重建， 米拉库尼斯将是又老又丑。
>> -Birds会撞到他们死。
>> -We'll都得到僵 脖子是仰视。
>> - 和没有人会坐在 前排再次。
>> -George卢卡斯将重新发布之星 战争again--瘦版。
>> - 我从来没有真正能够告诉 我想告诉的故事。
这是一个伟大的机会，我 试验的新技术。
>> -You're一个混蛋。
>> -Every时间移动装置是用来 录制视频，诱惑是存在的。
只是说没有。
说不乔治·卢卡斯。
说不老蜜拉库妮丝。
说不垂直视频。
>> -and如果你看到有人做出来，说， “你没有拍摄的正确的虚！”
>> [音乐播放]
>> [结束播放]
>> [掌声]
>> [AUDIO OUT]
罗伯BOWDEN：--simple 加密的形式，
这基本上是加密 和解密的秘密信息。
所以在这里我们有一个非常简单的玩具。
和想法是外环 旋转内圈周围。
你可以看到，也许如果我放大 在，that--很难看到的。
但是，等时，数 1--好，感动。
>> 数字1映射到信 X，2号映射到信
J.极其困难 不能快进。
信2映射到J. 3号映射到D.因此，
这个戒指，你可以给 有人信息1，2，3。
出于某种原因，你 想告诉他们XJD。
但是，你可以给他们 数字的一些消息，
并且，只要它们具有本环，它们 可以解密你想说什么。
>> 所以，你可能已经看到了这一点 密码学的具体的例子
之前，如果周围的圣诞节 你看过圣诞故事。
如果你从来没有见过 之前，那么就
打开TBS在字面上 任何时候在圣诞节前夕，
因为他们只是显示它背靠背 要回背靠背一整天。
而相关的视频是这样的。
[视频回放]
-be是众所周知的所有杂 拉尔夫·帕克现
任命小的一员 孤儿安妮秘密圈
并有权所有荣誉 而发生的收益于此。
签名小孤儿安妮。
会签皮埃尔·安德烈·墨！
荣誉和利益 已经在九岁的时候！
>> [大呼小叫无线电]
-来吧。
让我们开始吧。
我不需要所有的爵士乐 关于走私和海盗。
- 听明天夜间 结论冒险
的黑色海盗船。
现在，它的时间为 安妮的秘密消息
为你的成员秘社的。
请记住孩子，只有成员 安妮的秘密圈
可以解码安妮的秘密消息。
请记住，伊能静取决于你。
设置你的引脚为B2。
这里是该消息。
12。
11。
2。
- 我在我的第一次秘密会晤。
>> -25。
14。
11。
18。
16。
>> 哦，皮埃尔在巨大的声音今晚。
我可以告诉大家，今晚的 信息是非常重要的。
-3。
25。
这与安妮自己的消息。
请记住，不要告诉任何人。
>> - 五秒钟后，我的唯一 房间在房子里的九个男孩
可以坐在隐私和解码。
啊哈！
乙！
我去了下一个。
E.第一个字是“是”。
S.它现在来了更容易。
U. 25。
这是R.
-COMe上，拉尔夫！
我得走了！
-I'll被降权，马！
啧啧飕飕。
T. O.“一定要” - 一定要什么呢？
什么是小孤儿 安妮想说什么？
一定要什么？
>> -Randy也得去！
请你出来？
>> - 所有正确的，妈妈！
我马上就出来！
我是越来越近了。
张力是可怕的。
它以前如何？
这个星球的命运 可以挂在平衡！
>> -Ralphie，兰迪得走了！
>> -I'll就出来，哭出声来！
差不多了！
我的手指飞。
我的心是一个钢铁陷阱。
每一个毛孔振动。
这几乎是清楚的！
是。
一定要喝你的阿华田。
阿华田？
一个最低级的商业？
王八蛋。
>> [结束播放]
>> 罗伯BOWDEN：所以这就是如何 阿华田涉及到加密。
基本上CS50刚刚公布 阿华田，所以我们可以
是一个糟糕的商业为阿华田。
好吧。
所以现在实际的计算机科学。
还记得上周一，我们离开 潜水更深的字符串。
因此，我们正在处理 字符串“Zamyla”。
而且我们认识到 事实上，我们可以把
“Zamyla”作为一个字符序列。
请记住，我们学到了 支架符号。
因此，如果该值储存 在字符串“s”，那么
如果s表示托架0，这将 指示信资本Z.
如果我们s表示支架1，即 会指示第一小写一个，
依此类推，直到为s支架5， 这显示最后一个。
>> 现在，请记住， 此字符串的长度为6，
但是索引到字符串是 0到5，Z通过持续。
所以，现在这个融入一个更大的图片 您的计算机的内存，您的RAM。
因此，地方的计划， 你运行你的电脑
需要记住Zamyla 某处存储器。
因此，我可以有一个志愿者？
是的，请。
而你叫什么名字？
>> 院长：院长。
>> 罗伯BOWDEN：院长？
很高兴见到你，院长。
所以来这里了， 我们要你画
对我们的好漂亮的内存布局。
现在，我喜欢把内存 作为一个字节一个长条形，
但只是为了显示目的，我们将 只是从左至右，从上到下。
好不好？
>> 所以，我要表现出 program-- Getstrings.c。
所以，这一切的程序是 做的是要求四根弦
从与用户 GetString的，然后打印
无论是第一个串进了。
我们忽略了两个通四人。
行。
所以，在这里now--时 我第一次请求S1。
所以你的电脑。
而要实现的GetString。
所以，你请求一个字符串 我，我说好，院长。
给字符串“院长。”
>> 如此在内存，你 需要记住的“院长。”
所以写到内存的某个地方。
完善。
行。
所以，现在我们已经S2。
和s2将是 请求给GetString。
所以，我要输入一个字符串。
我要输入“汉娜”。
因此，输入“汉娜”的地方到内存中。
是啊。
A-H。
>> 好了，现在S3。
而这将是另一个 请给GetString。
所以现在进入“玛丽亚”。
好吧。
然后还有最后一个 请求给GetString，S4。
所以，我不知道。
怎么样，我们一起去 反政教分离运动。
所以输入到内存中。
是啊。
所以，只是做“抢”。
>> 行。
所以，现在explain--何必当初 你离开这些空间？
为什么你有这样的空白 空间在这里，在这里，并在这里？
是。
所以，当我去通知 打印s1--所以如果我们
有“汉娜”运行 直到旁边的“院长”
我们怎么知道什么时候 字符串“院长”结束？
因此打印字符串S1可以有 只印有“DeanHannahMariaRob”
如果它不具有任何线索 当“院长”实际上结束。
>> 好吧。
因此，在存储器中的方式，我们实际上 代表的字符串的这一端
是用反斜杠零。
所以这个空间正是我们想要的。
它应该是一个反斜杠为零。
这将是一个反斜杠零， 而这将是一个反斜杠为零。
你可以有一个神话般的奖金 为是一个完美的志愿者。
以一个压力球！
>> 行。
所以这个人物反斜线为零 我们如何表示字符串的结束。
它是如何在任何给定的程序 要打印的字符串，
这是how--记得我们学 上周strlen函数？
字符串的长度？
它是如何字符串的长度能 确定字符串是多久。
它只是不断迭代 在人物
直到找到 反斜线零字符。
因此，重要的是要实现 关于反斜线零字符
是它的代表 在位全部为零。
因此注意到，这是明显的 从零字符。
因此，零字符，如果你还记得 在实施例，他在结束了
讲座中，其中的字符映射 用于：像大写字母A映射到65。
小写映射到97。
小写的B。将98。
因此数字0映射用于：我不知道 知道了我的头顶。
44或45。
某处在该地区。
>> 这样的字符0是实数。
但是反斜杠零 映射到所有零位。
因此，有区别 反斜线0之间，
我们称之为空终止。
有区别 反斜线零和字符零。
>> 好吧。
所以说话有点了解的字符串。
于是，我们在这里看到，这是怎么 它会在内存中进行布局。
所以这个想法字符串作为一个序列 characters--所以官方电脑
sciency术语序列是一个数组。
所以我们称之为一个字符串 字符数组。
而实际上有其他数据 类型，我们可以使阵列出来。
>> 因此，要鼓励这一点，我们来看一个例子。
我们叫它ages0.c我会 复制和粘贴我们的模板。
行。
因此，这个方案我们 想要做的就是抓住时代
三个学生选修的课程。
因此，我们知道的INT age-- 现在我要说0。
所以，你可能要说AGE-1，但 为了我们会看到非常短的，
我会说INT age0等于调用getInt。
因此，同样的调用调用getInt 我们一直在使用我
没有发生被提示 他说，“给我的年龄。”
但只是要求它。
>> 而AGE-1等于调用getInt。
和INT age2等于调用getInt。
所以，再一次，三个学生，但 最终的变量指标
是age0通过age2。
行。
因此，这个程序将采取一切 我们希望与age0，AGE-1，和age2，
但这个方案最终 适用于三个学生。
>> 行。
所以，现在如果我想四名学生？
好吧，我不得不回去 进入我的代码，更改注释，
现在我们有一个int age3等于调用getInt。
行。
那么，谁看到了问题吗？
问题是什么 有了这样的设置呢？
是啊。
因此，我们要创建一个 变量为每个学生。
现在的作品，但 最后，如​​果我现在
说，“我想抓住的年龄 八名学生和16名学生
或将然而，许多学生 在数百名学生在CS50
或者成千上万的学生在校园里 或在世界上数十亿人？
所以这终究是不可持续的。
你看到自己复制任何时间 而像这样的粘贴代码，
你一般应该感到 有一个更好的办法。
>> 因此，这是我们引入 一个数组声明。
因此，当你声明一个数组， 这是一般的格式
是将会是什么样的。
我们要说的类型。
然后我们要 给该数组的名称，
就像我们定义任何给定的变量。
然后最后我们使用 这再次括号符号
但在从不同的上下文 我们如何早期使用它。
>> 所以在这里，这看起来像一个正常的 我们已经看到变量声明。
因此，我们以前见过INT×半结肠。
现在好了，我们可能会看到一些东西 如int x托架5。
并把这一想法付诸了 调用getInt程序，我们have--
所以我们可以实现 此以相同的方式。
>> 让我们在CS说，我们倾向于使用 N作为某物的数目。
所以在这里我们要 存储4个学生。
现在，我们可以说INT年龄 支架N--不太明白yet--
宣布4名学生组成的数组。
因此，这将如何看在 内存将与此类似。
清除此。
而我们将要在什么地方 在memory--我把这个在那里。
>> 如此在存储器中。
一二三四。
我们有四个整数一行 对于四个整数数组。
因此，目前，什么是 其中一个框的大小？
是啊。
这是四个字节。
这是32位。
所以，现在，这是不同的 从阵列，我们
看到人物的前面，数组。
在一个字符串中的每个盒子里只有一个字节， 因为一个字符中只有一个字节。
但随着整数数组，每个 盒必须是为了四个字节
以满足整个整数。
所以这是一个数组 4整数会是什么样子。
>> 然后回代码。
现在，我们要实际存储 到整数数组。
所以，现在这是一个非常，非常，非常 常见的模式是会在某个点
成为肌肉记忆。
所以，INT I等于0。
我小于n。
我加再加。
年龄段i等于调用getInt。
>> 所以这个循环，这种格式， 你应该得到很习惯。
因此，这是通常我们将如何 遍历几乎所有的数组。
现在可以看到这样的 从一开始就解释了为什么
我们没有for循环去为INT i等于1，我小于或等于10。
原因是，从开始 零使这项工作很好地与阵列。
所以数组是零索引。
如果该数组的长度为4， 该指数为0至3。
>> 所以通过第一 迭代的for循环
我们将要设置年龄 支架0等于调用调用getInt。
所以，无论我发生了 在键盘上输入。
在第二遍，我们 设置AGE-1等于调用getInt。
第三关，age2。
最后一传age3。
因此，如果在该循环的第一次通 我输入号码4在键盘上，
然后我们会在这里插入4。
如果我进入了第二遍 50，我们就放了50在这里。
在第三次我可能 进入负1，负1，
然后最后，如果我进入0--和 现在想起来，这是指数三种。
>> 之后，我们回送，我是 将要增加至4。
i是不再小于n，这是4。
我们跳出循环。
那么，什么是错呢？
[听不清]？
听众：[听不清]
>> 是。
因此，阵列只有四个名额， 这意味着作为索引0至3。
因此，如果是这样的话，我会 取值4在某些时候。
年龄段4将被设定 无论发生什么事是在这里
什么，我不得不说，进入6。
那将是它设置为6。
>> 但我们不知道什么是在这里。
这不是存储器 我们接触到。
所以，如果你还记得 以前的讲座，
他打印出Zamyla的价值观和 在某些时候，他打这个细分
故障。所以，你可能会看到 许多段错误，你
实施一些习题。
但是，这是一种方式，其中 你可能会遇到一个分割
故障，当你开始访问 记忆中，你不应该有办法。
所以我们没有获得 这个位置，这是一个错误。
>> 因此，这是更好的。
现在还有一个小 问题与此代码。
而这基本上是我们 还停留在四个学生。
现在，如果我想使用八名学生，确定。
这不是什么大不了的事。
我可以进去，改变 评论和n更改。
现在，这将与八名学生。
如果我这个编译并运行 这一点，它会显示我 -
它会要求整数八 学生和它只是工作。
但它不到理想的需要 重新编译程序每一次
我想改变学生人数 我想进入的年龄为。
>> 因此，在最后的改进 这一点，因为我们将看到这里 - 我们
要请求的人的数目。
在这里，我们有一些 人在房间
或任何年龄段的人在房间里。
但是，我们将请求数量 人在房间里，从用户。
因此，这是完全一样的做，而 循环，我们以前见过。
这是完全一样的 do-whil​​e循环，你
可实现对问题的设置。
因此，只要他们是 输入的n小于1，
因此，有必须是在 至少有一个人在房间里。
只要他们是 输入的n小于1，
那么我们要不断地问了。
请输入号码 人在房间里。
现在，当我们有多少 人在room--
所以我可能进入有 有200人在这个房间里。
然后到这里，我们要来了 并宣布尺寸200的数组。
我们声明数组的 大到足以容纳200岁。
下来，它的循环 你会得到非常习惯。
所以遍历数组， 分配给每个位置
在该阵列的整数，和 那么最终我们在这里
刚开迭代的例子 通过该数组，而不是分配价值，
但访问值。
>> 所以，在这里我们可以看到，我们 从现在说，一年的时间，
人％我将％I岁， 其中第一个％i是我加1。
所以，我是这样的指标变量。
而第二个％我会是 值存储在阵列年龄加1。
所以这个加1仅仅是因为我们 saying--这种加1，我加1岁。
这加1仅仅是因为我们 从现在的人说，一年
将这个老。
>> 那么，为什么是这样的我加1？
为什么我们有一个加1呢？
是啊。
是。
所以请记住阵列零索引。
因此，如果我们打印这个出来 有人刚读输出，
那么很可能他们想看到的东西 喜欢的人之一，个人排名第一，
将20岁。
人二号将是15岁。
他们不想看到的人 零号是15岁。
>> 因此，编译这一点，只是看到什么 它看起来like--创建一些空间。
让年龄编译。
运行青睐。
我们看到在房间里的人数。
所以我会说有 三个人在房间里。
人的头号年龄， 让我们说15，20，25。
现在我会说每年从 现在，他们将16，21，26。
让我们来看看这个作品 的n不等于3。
所以，如果我说的人数是5，一， 二，三，二，一，从现在起一年
他们会是两个，三个， 四，三，二十岁。
所以，我可以只为 轻易n为10,000。
现在，我会坐在这里很 一个在进入老龄化，但这个工程。
>> 所以，现在在内存的某个地方，我们 有大小万的阵列，
所以最终40000 字节，因为有
四个字节为每个整数。
因此，有一组 尺寸万，我们可以
存储这些10000人的青睐。
好吧。
任何有关这个问题？
是啊。
如果你给一个负数？
让我们看看会发生什么。
所以在这个特定case--数 人在房间里，消极的。
它拒绝了， 因为在这里，我们发生
待处理的事实，如果n是 不到一个我们要再次问。
如果您尝试声明 大小为负的数组，
它通常是行不通的。
>> 所以让我们试试。
让我们忽略了什么 他们的价值输入n个
而只是说INT年龄负值。
让我们来看看它甚至编译。
我不知道。
第
因此，年龄声明为 阵列具有负大小。
所以前期就识别到阵列不能 为负数的大小和拒绝。
现在，如果我们不处理 这do-whil​​e循环正常，
如果我们不检查 如果n小于1--
比方说，我们只是 没有这在所有
相反，我们只要抓住一个整数。
不管是什么整数， 我们声明大小的数组。
>> 因此，编译器不能 可能抱怨现在。
如果我编译this-- 因此它不能抱怨，
因为它无法知道我 要输入一个负数，
这可能是无效的。
对于所有它知道，我可能 输入一个正数，
这是完全有效的。
所以我想，如果我进入负1 房间里的人，分段错误。
>> 那么好吧。
因此，让我们加入这回只是 保持它原来是什么。
因此，请青睐。
现在，如果我想尝试 负age--让我们
说，有五人在房间里。
人的头号年龄 为负4，人3
是零，人three--行。
所以在这里，一年后的今天，人的数量 一会是负的3岁。
所以，很可能是没有意义的。
但是，这仅仅是因为看 在代码中所有我们正在做的
请求调用getInt。
>> 现在，如果我们曾经有过 GetPositiveInt功能
或者我们刚刚只是做到了这一点 排序一致，而循环出现了下滑，
那么这将完全正常工作。
但在这个特殊的 情况下，我们只是不
碰巧是处理负值。
有关数组的任何其他问题？
行。
>> 所以，我们现在已经看到阵列。
而我们将需要使用 本作的命令行参数。
因此，在问题设置two-- 我知道你们许多人
可能仍在工作的问题集 之一，但问题设置两个快到了。
在问题设置两个，你要 必须处理字符串，数组，
和命令行参数。
>> 那么，什么是命令行参数？
现在，你可以看到到这里一 小传情什么的
将要发生的事情。
我们看到INT为主，INC ARGC， 字符串argv的括号内。
因此，首先让我们来试着解读 是什么，它​​尽可能地说。
如今，OK。
>> 因此，在命令行中，你应该 已经习惯了某些命令
现在，你可能已经运行 CD在终端前。
因此，如果我们说的CD PSET1， 你知道，这应该
要改变到PSET1目录。
>> 现在发现，你从来没有 之前写的这样的程序。
你写的每个程序， 你会跑，说，点斜线马里奥，
点斜线贪婪，然后 可能会提示您输入。
现在，这不是 更改目录一样。
当你运行光盘，它并没有那么说， 该目录下你想cd到？
相反，你刚才说，CD PSET1和 它只是进入PSET1目录。
>> 所以类似地，我们有其它例子。
让你好。
当你运行make，它并没有那么说， 该方案将你喜欢做什么？
你刚才说，在 命令行让你好。
>> 此举是另一个例子。
这一次，我们正在移动的 mario.c文件上一级目录。
所以，现在我们知道这个例子 我们真正传递了两个参数。
有mario.c作为第一个参数， 和点点是第二个参数。
然后当你运行make，你 看到很长的命令line--
真的长的命令 印在命令行。
因此，长期command--这 是它只有很短的一部分，
但现在我们有三个 命令行参数。
点短跑零，你好，和hello.c的。
>> 因此，这些都是命令行 论点，论据
那你传递的 命令行，以便它
不必被提示 当你运行该程序。
这将是令人沮丧，如果当 您运行铛它说：“好，
这program--这 文件是在编译？
HELLO.C。
什么标志你会 想进入？破折号O操作。
你要什么 该文件被称为？
您好。
不，你只要运行铛 冲Ø你好hello.c的。
>> 因此，在回顾这个。
现在argc-- ARGC是参数计数。
它的命令行的数量 输入参数在命令行。
那么，argv--技术 在V代表矢量，
这基本上意味着阵列。
但是你可以忽略。
Argv--我们有串argv的， 所以字符串argv的括号内。
因此，这是另一种形式的 括号你以前没有见过。
所以，我们看到的支架 符号时，我们已经说过了，
像，字符串s等于Zamyla。
小号托架0访问字符Z.
>> 我们也看到括号时 我们说INT年龄支架5。
这个声明的大小5阵列。
因此，这里是一个版本的 我们以前没见过括号。
因此，这类字符串的argv的 将完全熟悉
这将只是一个字符串。
现在括号表示 这是一个数组。
所以字符串argv的括号手段 这ARGV是一个字符串数组。
现在技术上的字符串 是字符数组。
所以，这是现在一个数组 字符数组的。
但它更容易去思考 串这只是作为一个阵列。
>> 那么，为什么会在括号内是空的？
就像，为什么我们不能说， 支架5，支架N +
是啊。
我们不知道有多少 输入有将要。
因此，如果我们看一下铛的例子， 我们说铛破折号Ø你好hello.c的。
在这种特殊情况下，有发生 是三个命令行参数。
这样一来，brackets--我们拭目以待 在第二它不会是三种。
它在技术上的数字是4。
但支架，我们会 比方说，有三种。
但是现在，如果我们看招 mario.c点点，括号
我们希望把两个他们。
>> 这里面有很多的命令是 具有可变数量的命令行
参数。
那么这个版本的 括号符号表示
是的argv是一个字符串数组。
但是，我们不知道有多少 字符串的数组。
我们如何然后知道如何 许多字符串数组中？
这是整点ARGC。
ARGC告诉我们的argv有多长。
>> 所以，过去的事情保持 头脑是，从技术上，
命令本身视为一个 的命令行参数。
所以光盘PSET1，有两种 命令行参数。
在本身的程序，光盘，然后 它的实际参数部分，PSET1。
任何你写迄今程序 已经有一个命令行argument--点
斜线马里奥。
这是唯一的命令行参数。
>> 所以，现在看着铛 冲Ø你好hello.c的。
那么，什么是ARGC？
4。
所以ARGC为4。
铛，所以argv的支架0是铿锵。
argv的支架1是冲刺0。
argv的支架2个招呼， argv的支架3 hello.c的。
好了，问题在这，然后我们会 看一些编程的例子。
>> 行。
因此，我们将看看hello3.c。
所以这应该是由熟悉 的第一个C的例子之一
我们有，我们只想说，你好 世界，但现在这个就比较一般了。
因此，我们在这里打个招呼 ％S反斜线ñargv的支架1。
Notice--所以直至这一点，这是 什么我的模板文件看起来像。
我有INT主要（无效），然后我会 做一些在主函数。
现在相反，一旦我们开始处理 使用命令行参数，
我们要说明一个 不同的形式为主。
>> 所以在看hello3 再次，主要会
拿两个参数now-- INT ARGC， 命令行参数的个数，
和字符串argv的支架，实际 输入字符串在命令行。
所以我要改变这种状况 模板来反映这一事实。
现在，只要你写 一个程序，如果你不
需要采取的任何命令行 参数，那么就使用int主要（无效）。
但是现在，当你写 命令行参数的程序，其中
你会做的问题 设置two--所以现在你正在运行
需要采取的方案 命令行参数，
你需要有主要的这种形式。
>> 所以这里 - 这是大用途 的命令行参数。
所以打印的argv 1。
好让我们编译 并运行此程序。
让hello3。
编译。
点斜线hello3。
而让我们说，“抢”。
您好罗布。
如果我说，“你好玛丽亚，”你好玛丽亚。
您好玛丽亚。
汉娜还称，“你好 玛丽亚，“因为我不是
做我们的argv 2东西。
ARGV 2现在是“汉娜”。
ARGC将是3。
如果我这样做？
所以，你好空。
>> 他简要介绍了这一事实 ，从技术上，GetString的
可能返回null，但我们会得到一个 很多成什么空实际上是。
但把它当作的事 事实上，没有一般是不好的。
我们做错了什么，如果 它的输出“Hello空。”
其原因我们做了 有些不对劲is--好，
当我跑点斜线hello3，ARGC为1。
因此，这意味着argv的长度为1。
如果数组的长度为1， 唯一有效的指标是零。
所以，这里的argv 1是外 此数组的范围。
这是类似于以前，当我试图 存储6阵列的端外。
所以我想访问什么 在argv数之外，
而我们得到空。
>> 所以一个更好的版本 此，一种改进，
明确检查ARGC。
因此，如果ARGC等于2，这意味着我们跑 像点斜线hello3罗布。
它会打印“你好抢。”
如果ARGC不等于 2，那么它只是将
忽略不管你把 在命令行参数
作为命令行参数。
或者，如果你没有把所有的一切，这是 只是要忽略这一点，只是说，
“你好，你。”
>> 因此，编制本。
让hello4。
而运行hello4。
跑步是这样， 应该怎样打印？
“你好，你。”
你好，你。
那么hello4罗布？
“你好抢。”
最后，你好罗布·玛丽亚· 仅仅是“你好，你”了，
因为你没有真正进入 东西，它的预期。
您输入了更多的名字 比它可以处理，
所以它只是默认为 你好，你的行为。
因此，在这个问题吗？
或者命令行参数？
>> 好了，纵观一 利用夫妇更多的例子
命令行arguments--第一 我们的argv破折号1点温度。
因此，意见白送什么 这个程序应该做的。
但是请注意now-- for循环， 这匹配的精确模式
我说了。
我们恰好是 用n个ARGC代替。
现在ARGC真的是n个。
它的argv数组的长度。
因此，在遍历ARGV 阵列的printf - 荷兰国际集团各argv的值。
>> 所以，如果我做这个。
请ARGV 1。
它编译。
点斜线的argv 1。
就在运行这一点， 打印点斜线的argv 1
因为这是唯一的命令行 argument--程序名称。
总是会有在least-- 的argc不能小于1，
因为总会有至少 是程序名运行。
所以argv的1罗布将打印的argv 1 然后在新行“抢”。
>> 因此在第一次迭代 此循环中，i是0。
ARGV 0是程序名。
点斜线的argv 1。
然后的argv 1是我第一次 命令行参数，这是罗布。
在这一点上，我们是平等的像argc。
我们跳出循环，我们就大功告成了。
因此，这将适用于任意 命令行参数的数目。
请注意，它打印的argv 0，argv的 1，ARGV 2，ARGV 3，argv的4。
而且没有ARGV 5。
的argc等于5。
因此，在argc--在i等于5， 我们跳出循环。
行。
因此，我们之前的问题上 看一个更复杂的例子？
>> 所以ARGV 2。
好吧。
因此，我们仍然打印 命令行参数。
但现在发现，我们有 一个嵌套的循环。
那么，什么是该做的？
因此，第一个循环是做 正是以前一样。
我们还在遍历 每一个命令行参数，
但现在这第二loop--我们已经 之前也看到了这样的事情。
当他被遍历 Zamyla打印出Z-A-M-Y-L-A。
所以这第二个循环对于int j为 0，n等于argv的支架我的strlen的。
>> 因此，让我们首先想到的 the--让我们穿行。
让我们思考什么电脑会 怎么做，如果我跑这个项目刚才点
斜线的argv冲刺2。
所以，如果我跑这个代码，然后 的argc将是等于1。
和字符串argv--这里只有 将是一个索引argv中，
而这将是等于点 斜线的argv 2--程序名称。
>> 好了，现在我等于0，小于我 1，我加再加对于int j为0，
n等于argv的支架0 strlen的，所以在 此循环的第一次迭代。 ARGV
支架0点斜线的argv 2。
那么，什么是该字符串的长度？
好了，点斜线A-R-G-V仪表板2。
这样的strlen的，这将是8。
所以j为0，n等于8。
只要j是小于8，J ++。
有了这样的，我们要成为 打印单个字符，它
是argv的支架我括号学家
>> 因此，只有我是零。
我们仍然只有一个 命令行参数。
在这第一次迭代 的for循环，我们
将要印刷 argv的支架0支架0。
然后j被要递增。
而且我们要打印 argv的支架0支架1。
然后argv的支架0支架2。
>> 所以这是我们第一次遇到 多维数组。
还记得前面我说的 这ARGV在技术上
字符的数组的数组。
所以在这里，如果我说的一样 字符串s等于argv的支架我，
然后我说，S支架Ĵ，这 将完成同样的事情。
现在，你已经看过小号支架学家
这只是访问的第j个 字符该字符串。
因此，与这一点，我们所得到的 第i个的argv的第j个字符。
>> 那么，这应该最终输出？
做的argv 2。
它编译。
点斜线的argv 2。
“罗布·玛丽亚·汉娜，” 并给我们一些空间。
所以我们看到，这是输出 点上了自己的线，斜线
在自己的线路和自己的行。
它打印出的每个 个性
每个命令行参数。
然后在它们之间， 因为这个新线
我们要打印到这里，在 他们之间它会打印新的生产线。
>> 因此，这是类似于 以前的argv破折号1，
它印在每个 命令行参数，
但现在我们要打印 命令行参数
然后通过每个迭代 每一个命令行参数的字符
得到这个输出。
好不好？
因此，在这个问题吗？
>> 有一点要注意的是， 命令行arguments--
所以它们之间用空格分隔为 你自然会期望他们。
这样一个串可具有在它的空间。
这不是超级重要，但如果我 希望第三个命令行参数
有一个空间，然后我 可以说这样的事情。
好不好？
所以这个现在还只有三个 命令行arguments--以及4。
点斜线的argv冲刺2，抢， 玛丽亚和汉娜彭博。
行。
在这个问题？
>> 没有什么特别的 有关空格字符。
这恰好是该 命令行把空格字符
如何你分开每一个参数。
好吧。
那么接下来的问题集 two--你将是
看着密钥加密。
因此，类似于在实施例 我们从圣诞故事看到，
你将要实施的一些 即，给定的消息的算法，
你要能 该消息加密
只有具有这个秘密的人 键，用解码器环，
应该能够进行解密。
>> 所以这是标准版。
你会被执行 两个不同的版本。
如果你碰巧看看 在现在的黑客版 - 的，
我们打​​算给 你喜欢这样的字符串，
它表示一个加密口令。
所以，你的目标是要弄清楚 解密的口令是什么。
现在，这其实是多么的密码 存储在很多计算机，
它只是存储此 随机字符串。
你必须弄清楚如何获得 从这个随机字符串
什么原始密码了。
>> 最后，在此之后 问题集，你应该
能够理解这是什么意思。
所以，您将学习如何解密 这种随机的字符串。
同样，如果您从周记 0，你可能已经看到了这个网址。
而且你应该能 最终解密此。
你可能不会开心，当你 解密并点击链接。
好吧。
以上就是今天。
所以，看到你下周！
>> [电子音乐播放]