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.