1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> 演讲嘉宾:让我们写一个程序, 提示输入两个字符串和用户 3 00:00:03,530 --> 00:00:07,170 然后报告是否这些字符串 是相同的或不相同的。 4 00:00:07,170 --> 00:00:10,290 我已经开始我们在这里下车了 调用printf的两次调用 5 00:00:10,290 --> 00:00:14,520 GetString引发该异常两次,存储返回 在s和t,价值分别。 6 00:00:14,520 --> 00:00:17,960 >> 现在,我的直觉来比较这两个 字符串是使用熟悉的 7 00:00:17,960 --> 00:00:19,160 相等运算符 - 8 00:00:19,160 --> 00:00:22,070 如果s等于等于万吨。 9 00:00:22,070 --> 00:00:28,120 然后我会继续前进,打印 出“你键入同样的事情! 10 00:00:28,120 --> 00:00:35,190 否则,如果这不是真的,我只是 将输入的printf(“你输入的 11 00:00:35,190 --> 00:00:37,880 不同的东西! 12 00:00:37,880 --> 00:00:38,850 >> 相当简单 - 13 00:00:38,850 --> 00:00:41,820 我只是比较对阵 吨,如果他们是平等的, 14 00:00:41,820 --> 00:00:43,250 打印出一样多。 15 00:00:43,250 --> 00:00:45,450 让我们来编译并运行这个程序。 16 00:00:45,450 --> 00:00:51,950 做比较0 /比较 0,想说什么,你好, 17 00:00:51,950 --> 00:00:54,200 说些什么,你好。 18 00:00:54,200 --> 00:00:56,870 >> 不幸的是,该方案认为我已经 类型不同的东西,即使我 19 00:00:56,870 --> 00:00:59,530 明确输入“你好”的 同样的方式两次。 20 00:00:59,530 --> 00:01:00,850 现在,为什么会这样呢? 21 00:01:00,850 --> 00:01:03,750 >> 嗯,事实证明,这一切 时间,字符串已经有点多 22 00:01:03,750 --> 00:01:06,780 比字符序列复杂 引擎盖下方。 23 00:01:06,780 --> 00:01:11,450 在现实中,一个字符串是一个指针或 地址,特别是地址 24 00:01:11,450 --> 00:01:14,640 在该第一个字符的 字符序列。 25 00:01:14,640 --> 00:01:18,640 >> 所以,当我们向T比较s 与同等等号,我们 26 00:01:18,640 --> 00:01:23,200 其实是问,是这个地址 等于等于这个地址? 27 00:01:23,200 --> 00:01:26,850 而这不会是这样,如果 用户在两种不同的已键入 28 00:01:26,850 --> 00:01:30,370 字符串和我们所谓的GetString两次 让他们,因为内存 29 00:01:30,370 --> 00:01:34,480 该GetString的用于存储所述第一 字符串可能这里在RAM中,但 30 00:01:34,480 --> 00:01:37,120 这GetString的用来存储内存 第二个字符串是怎么回事 31 00:01:37,120 --> 00:01:38,760 在这里在RAM中。 32 00:01:38,760 --> 00:01:42,380 当然,那么,这两个大块 内存有不同的地址 33 00:01:42,380 --> 00:01:44,220 他们的第一个字符。 34 00:01:44,220 --> 00:01:46,120 >> 所以是S等于等于t? 35 00:01:46,120 --> 00:01:46,885 嗯,没有。 36 00:01:46,885 --> 00:01:50,510 如果s和t都指向不同的 内存块,因为他们将通过 37 00:01:50,510 --> 00:01:54,140 调用GetString的两倍,他们不是, 实际上,将是相同的。 38 00:01:54,140 --> 00:01:57,700 因此它似乎是这样的情况,以 在直观比较两个字符串 39 00:01:57,700 --> 00:02:01,050 我们期待的方式,字符 字符,我们需要另一种技术 40 00:02:01,050 --> 00:02:02,300 干脆。 41 00:02:02,300 --> 00:02:03,902