>> СПІКЕР: Давайте напишемо програму, яка запитує у користувача двох рядків і
потім повідомляє, чи є ці рядки однакові або ще не однакові.
Я вже почав нас тут називаючи Printf двічі і виклику
GetString двічі, зберігання повернення Значення в с і т, відповідно.
>> Тепер, мої інстинкти, щоб порівняти ці два Рядки буде використовувати знайомі
Оператор рівності -
якщо з одно дорівнює т.
Тоді я буду йти вперед і друк з "Ви ввели те ж саме!
В іншому випадку, якщо це не так, я просто збирається ввести Е ("Ви ввели
різні речі!
>> Досить просто -
Я просто порівнюючи сек проти т, і якщо вони рівні,
роздрукувавши стільки ж.
Давайте скомпілювати і запустити цю програму.
Зробити порівняти 0. / Порівняти 0, щось сказати, привіт,
щось сказати, привіт.
>> На жаль, програма думає, що я набрали різні речі, хоча я
чітко набрав "привіт" Точно так само обидва рази.
Тепер, чому це може бути?
>> Ну, виходить, що все це Час, рядки, був трохи більш
складніше, ніж послідовність символів під капотом.
Насправді, це рядок є покажчиком або адреса, зокрема, адреса
першого символу в тому, що послідовність символів.
>> І тому, коли ми порівнюємо сек проти т з рівним знака рівності, ми
насправді просять, це адреса дорівнює дорівнює цією адресою?
І, що не збирається бути у випадку, якщо користувач ввів у двох різних
Рядки і ми назвали GetString двічі щоб отримати їх, тому що пам'ять
що GetString використовує для зберігання першим рядок може бути тут, в пам'яті, але
пам'яті, що GetString використовує для зберігання другий рядок буде
бути тут, в оперативній пам'яті.
І звичайно, те, ці два шматки пам'яті мають різні адреси для
їх найперші символи.
>> Так з рівними дорівнює т?
Ну, немає.
Якщо с і т вказують на різні шматки пам'яті, як вони були б на
називаючи GetString двічі, це не так, насправді, буде те ж саме.
Так що, схоже, має місце, що в порівняти два рядки в інтуїтивний
спосіб, яким ми очікуємо, характер для характер, нам потрібен інший метод
в цілому.