>> SPEAKER: Poďme napísať program, ktorý vyzve užívateľa na zadanie dvoch reťazcov a
potom hlási, či sú tieto reťazce sú rovnaké alebo sa líšia.
Už som sa k nám nastupuje tu volanie printf dvakrát a volanie
GetString dvakrát, skladovanie návrat hodnoty S a T, resp.
>> Teraz, môj inštinkt porovnať tieto dve reťazca by bolo použitie zoznámiť
operátor rovnosti -
ak je rovná rovná t
Potom budem pokračovať a tlač out "Zadali ste to isté!
Inak, ak to nie je pravda, ja som jednoducho bude typu printf ("ste zadali
rôzne veci!
>> Celkom jednoduché -
Som proste porovnaní s proti t, a ak sú rovnaké,
vytlačiť toľko.
Poďme skompilovať a spustiť tento program.
Uistite sa porovnať 0. / Porovnať 0, povedz niečo, Dobrý deň,
niečo povedať, ahoj.
>> Bohužiaľ, program si myslí, že som zadali rôzne veci, aj keď som
jasne napísal "ahoj" rovnakým spôsobom v oboch prípadoch.
A teraz, prečo by to mohlo byť?
>> No, ukázalo sa, že to všetko čas, reťazca boli trochu viac
zložitejšie, než sekvencie znakov pod kapotou.
V skutočnosti, reťazec je ukazovateľ alebo adresa, konkrétne adresa
prvého znaku v tom, že postupnosť znakov.
>> A tak, keď sme sa porovnať s proti t sa rovná znamienko rovná sa, že sme
v skutočnosti sa pýtam, je táto adresa equal na túto adresu?
A že to nebude prípad užívateľ zadal v dvoch rôznych
reťazca a zavolali sme GetString dvakrát aby si ich, pretože pamäť
že GetString používa na uloženie prvej reťazec môže byť tu v RAM, ale
pamäti, že GetString používa na ukladanie Druhý reťazec sa deje
sa tu v pamäti RAM.
A samozrejme, potom tie dva kusy pamäte majú rôzne adresy
ich úplne prvý znaky.
>> Tak sa s equal na t?
No, no.
Ak s a t sú poukazom na rôzne kúsky pamäti, ako by to bolo tým,
volanie GetString dvakrát, že to nie je, v skutočnosti, bude rovnaká.
Takže sa zdá, že je pravda, že sa porovnať dva reťazce v intuitívne
tak, že očakávame, znak pre charakter, budeme potrebovať ďalšiu techniku
dohromady.