演讲嘉宾:让我们写一个程序, 提示输入两个字符串和用户 然后报告是否这些字符串 是相同的或不相同的。 我已经开始我们在这里下车了 调用printf的两次调用 GetString引发该异常两次,存储返回 在s和t,价值分别。 现在,我的直觉来比较这两个 字符串是使用熟悉的 相等运算符 - 如果s等于等于万吨。 然后我会继续前进,打印 出“你键入同样的事情! 否则,如果这不是真的,我只是 将输入的printf(“你输入的 不同的东西! 相当简单 - 我只是比较对阵 吨,如果他们是平等的, 打印出一样多。 让我们来编译并运行这个程序。 做比较0 /比较 0,想说什么,你好, 说些什么,你好。 不幸的是,该方案认为我已经 类型不同的东西,即使我 明确输入“你好”的 同样的方式两次。 现在,为什么会这样呢? 嗯,事实证明,这一切 时间,字符串已经有点多 比字符序列复杂 引擎盖下方。 在现实中,一个字符串是一个指针或 地址,特别是地址 在该第一个字符的 字符序列。 所以,当我们向T比较s 与同等等号,我们 其实是问,是这个地址 等于等于这个地址? 而这不会是这样,如果 用户在两种不同的已键入 字符串和我们所谓的GetString两次 让他们,因为内存 该GetString的用于存储所述第一 字符串可能这里在RAM中,但 这GetString的用来存储内存 第二个字符串是怎么回事 在这里在RAM中。 当然,那么,这两个大块 内存有不同的地址 他们的第一个字符。 所以是S等于等于t? 嗯,没有。 如果s和t都指向不同的 内存块,因为他们将通过 调用GetString的两倍,他们不是, 实际上,将是相同的。 因此它似乎是这样的情况,以 在直观比较两个字符串 我们期待的方式,字符 字符,我们需要另一种技术 干脆。