[音乐播放] 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,你可能已经看到了这个网址。 而且你应该能 最终解密此。 你可能不会开心,当你 解密并点击链接。 好吧。 以上就是今天。 所以,看到你下周! [电子音乐播放]