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