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