1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> SPEAKER: Pojďme napsat program, který vyzve uživatele k zadání dvou řetězců a 3 00:00:03,530 --> 00:00:07,170 pak hlásí, zda jsou tyto řetězce jsou stejné nebo se liší. 4 00:00:07,170 --> 00:00:10,290 Už jsem se k nám nastupuje tady volání printf dvakrát a volání 5 00:00:10,290 --> 00:00:14,520 GetString dvakrát, skladování návrat hodnoty S a T, resp. 6 00:00:14,520 --> 00:00:17,960 >> Nyní, můj instinkt porovnat tyto dvě řetězce by bylo použití seznámit 7 00:00:17,960 --> 00:00:19,160 operátor rovnosti - 8 00:00:19,160 --> 00:00:22,070 pokud je rovná rovná t. 9 00:00:22,070 --> 00:00:28,120 Pak budu pokračovat a tisk out "Zadali jste to samé! 10 00:00:28,120 --> 00:00:35,190 Jinak, pokud to není pravda, já jsem prostě bude typu printf ("jste zadali 11 00:00:35,190 --> 00:00:37,880 různé věci! 12 00:00:37,880 --> 00:00:38,850 >> Docela jednoduché - 13 00:00:38,850 --> 00:00:41,820 Jsem prostě porovnání s proti t, a pokud jsou stejné, 14 00:00:41,820 --> 00:00:43,250 vytisknout tolik. 15 00:00:43,250 --> 00:00:45,450 Pojďme zkompilovat a spustit tento program. 16 00:00:45,450 --> 00:00:51,950 Ujistěte se porovnat 0. / Porovnat 0, řekni něco, Dobrý den, 17 00:00:51,950 --> 00:00:54,200 něco říct, ahoj. 18 00:00:54,200 --> 00:00:56,870 >> Bohužel, program si myslí, že jsem zadali různé věci, i když jsem 19 00:00:56,870 --> 00:00:59,530 jasně napsal "ahoj" stejným způsobem v obou případech. 20 00:00:59,530 --> 00:01:00,850 A teď, proč by to mohlo být? 21 00:01:00,850 --> 00:01:03,750 >> No, ukázalo se, že to všechno čas, řetězce byly trochu více 22 00:01:03,750 --> 00:01:06,780 složitější, než sekvence znaků pod kapotou. 23 00:01:06,780 --> 00:01:11,450 Ve skutečnosti, řetězec je ukazatel nebo adresa, konkrétně adresa 24 00:01:11,450 --> 00:01:14,640 prvního znaku v tom, že posloupnost znaků. 25 00:01:14,640 --> 00:01:18,640 >> A tak, když jsme se porovnat s proti t se rovná znaménko rovná se, že jsme 26 00:01:18,640 --> 00:01:23,200 ve skutečnosti se ptám, je tato adresa equal na tuto adresu? 27 00:01:23,200 --> 00:01:26,850 A že to nebude případ uživatel zadal ve dvou různých 28 00:01:26,850 --> 00:01:30,370 řetězce a zavolali jsme GetString dvakrát aby si je, protože paměť 29 00:01:30,370 --> 00:01:34,480 že GetString používá k uložení první řetězec může být zde v RAM, ale 30 00:01:34,480 --> 00:01:37,120 paměti, že GetString používá k ukládání Druhý řetězec se děje 31 00:01:37,120 --> 00:01:38,760 se zde v paměti RAM. 32 00:01:38,760 --> 00:01:42,380 A samozřejmě, pak ty dva kusy paměti mají různé adresy 33 00:01:42,380 --> 00:01:44,220 jejich úplně první znaky. 34 00:01:44,220 --> 00:01:46,120 >> Tak se s equal na t? 35 00:01:46,120 --> 00:01:46,885 No, no. 36 00:01:46,885 --> 00:01:50,510 Pokud s a t jsou poukazem na různé kousky paměti, jak by to bylo tím, 37 00:01:50,510 --> 00:01:54,140 volání GetString dvakrát, že to není, ve skutečnosti, bude stejná. 38 00:01:54,140 --> 00:01:57,700 Takže se zdá, že je pravda, že se porovnat dva řetězce v intuitivní 39 00:01:57,700 --> 00:02:01,050 tak, že očekáváme, znak pro charakter, budeme potřebovat další techniku 40 00:02:01,050 --> 00:02:02,300 dohromady. 41 00:02:02,300 --> 00:02:03,902