1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> СПИКЕР: Давайте напишем программу, которая запрашивает у пользователя двух строк и 3 00:00:03,530 --> 00:00:07,170 затем сообщает, является ли эти строки одинаковы или не одинаковы. 4 00:00:07,170 --> 00:00:10,290 Я уже начал нас здесь называя Printf дважды и вызова 5 00:00:10,290 --> 00:00:14,520 GetString дважды, хранения возвращение Значения в с и т, соответственно. 6 00:00:14,520 --> 00:00:17,960 >> Теперь, мои инстинкты, чтобы сравнить эти два Строки будет использовать знакомые 7 00:00:17,960 --> 00:00:19,160 Оператор равенства - 8 00:00:19,160 --> 00:00:22,070 если с равно равна т. 9 00:00:22,070 --> 00:00:28,120 Тогда я буду идти вперед и печать из "Вы ввели то же самое! 10 00:00:28,120 --> 00:00:35,190 В противном случае, если это не так, я просто собирается ввести Е ("Вы ввели 11 00:00:35,190 --> 00:00:37,880 разные вещи! 12 00:00:37,880 --> 00:00:38,850 >> Довольно просто - 13 00:00:38,850 --> 00:00:41,820 Я просто сравнивая сек против т, и если они равны, 14 00:00:41,820 --> 00:00:43,250 распечатав столько же. 15 00:00:43,250 --> 00:00:45,450 Давайте скомпилировать и запустить эту программу. 16 00:00:45,450 --> 00:00:51,950 Сделать сравнить 0. / Сравнить 0, что-то сказать, привет, 17 00:00:51,950 --> 00:00:54,200 что-то сказать, привет. 18 00:00:54,200 --> 00:00:56,870 >> К сожалению, программа думает, что я набрали разные вещи, хотя я 19 00:00:56,870 --> 00:00:59,530 четко набрал "привет" Точно так же оба раза. 20 00:00:59,530 --> 00:01:00,850 Теперь, почему это может быть? 21 00:01:00,850 --> 00:01:03,750 >> Ну, получается, что все это Время, строки, был немного более 22 00:01:03,750 --> 00:01:06,780 сложнее, чем последовательность символов под капотом. 23 00:01:06,780 --> 00:01:11,450 На самом деле, это строка является указателем или адрес, в частности, адрес 24 00:01:11,450 --> 00:01:14,640 первого символа в том, что последовательность символов. 25 00:01:14,640 --> 00:01:18,640 >> И поэтому, когда мы сравниваем сек против т с равным знака равенства, мы 26 00:01:18,640 --> 00:01:23,200 на самом деле просят, это адрес равна равна этому адресу? 27 00:01:23,200 --> 00:01:26,850 И, что не собирается быть в случае, если пользователь ввел в двух разных 28 00:01:26,850 --> 00:01:30,370 Строки и мы назвали GetString дважды чтобы получить их, потому что память 29 00:01:30,370 --> 00:01:34,480 что GetString использует для хранения первым строка может быть здесь, в памяти, но 30 00:01:34,480 --> 00:01:37,120 памяти, что GetString использует для хранения вторая строка будет 31 00:01:37,120 --> 00:01:38,760 быть здесь, в оперативной памяти. 32 00:01:38,760 --> 00:01:42,380 И конечно, то, эти два куски памяти имеют разные адреса для 33 00:01:42,380 --> 00:01:44,220 их самые первые символы. 34 00:01:44,220 --> 00:01:46,120 >> Так с равными равна т? 35 00:01:46,120 --> 00:01:46,885 Ну, нет. 36 00:01:46,885 --> 00:01:50,510 Если с и т указывают на разные куски памяти, как они были бы на 37 00:01:50,510 --> 00:01:54,140 называя GetString дважды, это не так, на самом деле, будет то же самое. 38 00:01:54,140 --> 00:01:57,700 Так что, похоже, имеет место, что в сравнить две строки в интуитивный 39 00:01:57,700 --> 00:02:01,050 способ, которым мы ожидаем, характер для характер, нам нужен другой метод 40 00:02:01,050 --> 00:02:02,300 в целом. 41 00:02:02,300 --> 00:02:03,902