1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> SPEAKER: Poďme napísať program, ktorý vyzve užívateľa na zadanie dvoch reťazcov a 3 00:00:03,530 --> 00:00:07,170 potom hlási, či sú tieto reťazce sú rovnaké alebo sa líšia. 4 00:00:07,170 --> 00:00:10,290 Už som sa k nám nastupuje tu volanie printf dvakrát a volanie 5 00:00:10,290 --> 00:00:14,520 GetString dvakrát, skladovanie návrat hodnoty S a T, resp. 6 00:00:14,520 --> 00:00:17,960 >> Teraz, môj inštinkt porovnať tieto dve reťazca by bolo použitie zoznámiť 7 00:00:17,960 --> 00:00:19,160 operátor rovnosti - 8 00:00:19,160 --> 00:00:22,070 ak je rovná rovná t 9 00:00:22,070 --> 00:00:28,120 Potom budem pokračovať a tlač out "Zadali ste to isté! 10 00:00:28,120 --> 00:00:35,190 Inak, ak to nie je pravda, ja som jednoducho bude typu printf ("ste zadali 11 00:00:35,190 --> 00:00:37,880 rôzne veci! 12 00:00:37,880 --> 00:00:38,850 >> Celkom jednoduché - 13 00:00:38,850 --> 00:00:41,820 Som proste porovnaní s proti t, a ak sú rovnaké, 14 00:00:41,820 --> 00:00:43,250 vytlačiť toľko. 15 00:00:43,250 --> 00:00:45,450 Poďme skompilovať a spustiť tento program. 16 00:00:45,450 --> 00:00:51,950 Uistite sa porovnať 0. / Porovnať 0, povedz niečo, Dobrý deň, 17 00:00:51,950 --> 00:00:54,200 niečo povedať, ahoj. 18 00:00:54,200 --> 00:00:56,870 >> Bohužiaľ, program si myslí, že som zadali rôzne veci, aj keď som 19 00:00:56,870 --> 00:00:59,530 jasne napísal "ahoj" rovnakým spôsobom v oboch prípadoch. 20 00:00:59,530 --> 00:01:00,850 A teraz, prečo by to mohlo byť? 21 00:01:00,850 --> 00:01:03,750 >> No, ukázalo sa, že to všetko čas, reťazca boli trochu viac 22 00:01:03,750 --> 00:01:06,780 zložitejšie, než sekvencie znakov pod kapotou. 23 00:01:06,780 --> 00:01:11,450 V skutočnosti, reťazec je ukazovateľ alebo adresa, konkrétne adresa 24 00:01:11,450 --> 00:01:14,640 prvého znaku v tom, že postupnosť znakov. 25 00:01:14,640 --> 00:01:18,640 >> A tak, keď sme sa porovnať s proti t sa rovná znamienko rovná sa, že sme 26 00:01:18,640 --> 00:01:23,200 v skutočnosti sa pýtam, je táto adresa equal na túto adresu? 27 00:01:23,200 --> 00:01:26,850 A že to nebude prípad užívateľ zadal v dvoch rôznych 28 00:01:26,850 --> 00:01:30,370 reťazca a zavolali sme GetString dvakrát aby si ich, pretože pamäť 29 00:01:30,370 --> 00:01:34,480 že GetString používa na uloženie prvej reťazec môže byť tu v RAM, ale 30 00:01:34,480 --> 00:01:37,120 pamäti, že GetString používa na ukladanie Druhý reťazec sa deje 31 00:01:37,120 --> 00:01:38,760 sa tu v pamäti RAM. 32 00:01:38,760 --> 00:01:42,380 A samozrejme, potom tie dva kusy pamäte majú rôzne adresy 33 00:01:42,380 --> 00:01:44,220 ich úplne prvý znaky. 34 00:01:44,220 --> 00:01:46,120 >> Tak sa s equal na t? 35 00:01:46,120 --> 00:01:46,885 No, no. 36 00:01:46,885 --> 00:01:50,510 Ak s a t sú poukazom na rôzne kúsky pamäti, ako by to bolo tým, 37 00:01:50,510 --> 00:01:54,140 volanie GetString dvakrát, že to nie je, v skutočnosti, bude rovnaká. 38 00:01:54,140 --> 00:01:57,700 Takže sa zdá, že je pravda, že sa porovnať dva reťazce v intuitívne 39 00:01:57,700 --> 00:02:01,050 tak, že očakávame, znak pre charakter, budeme potrebovať ďalšiu techniku 40 00:02:01,050 --> 00:02:02,300 dohromady. 41 00:02:02,300 --> 00:02:03,902