>> SPEAKER: Pojďme napsat program, který vyzve uživatele k zadání dvou řetězců a
pak hlásí, zda jsou tyto řetězce jsou stejné nebo se liší.
Už jsem se k nám nastupuje tady volání printf dvakrát a volání
GetString dvakrát, skladování návrat hodnoty S a T, resp.
>> Nyní, můj instinkt porovnat tyto dvě řetězce by bylo použití seznámit
operátor rovnosti -
pokud je rovná rovná t.
Pak budu pokračovat a tisk out "Zadali jste to samé!
Jinak, pokud to není pravda, já jsem prostě bude typu printf ("jste zadali
různé věci!
>> Docela jednoduché -
Jsem prostě porovnání s proti t, a pokud jsou stejné,
vytisknout tolik.
Pojďme zkompilovat a spustit tento program.
Ujistěte se porovnat 0. / Porovnat 0, řekni něco, Dobrý den,
něco říct, ahoj.
>> Bohužel, program si myslí, že jsem zadali různé věci, i když jsem
jasně napsal "ahoj" stejným způsobem v obou případech.
A teď, proč by to mohlo být?
>> No, ukázalo se, že to všechno čas, řetězce byly trochu více
složitější, než sekvence znaků pod kapotou.
Ve skutečnosti, řetězec je ukazatel nebo adresa, konkrétně adresa
prvního znaku v tom, že posloupnost znaků.
>> A tak, když jsme se porovnat s proti t se rovná znaménko rovná se, že jsme
ve skutečnosti se ptám, je tato adresa equal na tuto adresu?
A že to nebude případ uživatel zadal ve dvou různých
řetězce a zavolali jsme GetString dvakrát aby si je, protože paměť
že GetString používá k uložení první řetězec může být zde v RAM, ale
paměti, že GetString používá k ukládání Druhý řetězec se děje
se zde v paměti RAM.
A samozřejmě, pak ty dva kusy paměti mají různé adresy
jejich úplně první znaky.
>> Tak se s equal na t?
No, no.
Pokud s a t jsou poukazem na různé kousky paměti, jak by to bylo tím,
volání GetString dvakrát, že to není, ve skutečnosti, bude stejná.
Takže se zdá, že je pravda, že se porovnat dva řetězce v intuitivní
tak, že očekáváme, znak pro charakter, budeme potřebovat další techniku
dohromady.