1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> GŁOŚNIK: Chcę napisać program, który pyta użytkownika o dwóch strunach i 3 00:00:03,530 --> 00:00:07,170 następnie informuje, czy te struny są takie same lub nie same. 4 00:00:07,170 --> 00:00:10,290 Już zaczęło nam się tutaj dzwoni dwa razy i wywołanie printf 5 00:00:10,290 --> 00:00:14,520 GetString dwukrotnie, przechowywania powrót Wartości w s i t, odpowiednio. 6 00:00:14,520 --> 00:00:17,960 >> Teraz, moje instynkty porównać te dwa ciągi byłoby użyć zaznajomieni 7 00:00:17,960 --> 00:00:19,160 Operator równości - 8 00:00:19,160 --> 00:00:22,070 jeśli y jest równa równa t. 9 00:00:22,070 --> 00:00:28,120 Potem mam zamiar iść do przodu i drukuj z "Wpisano to samo! 10 00:00:28,120 --> 00:00:35,190 Innego, jeśli to nie jest prawda, jestem po prostu będzie wpisać printf ("Wpisano 11 00:00:35,190 --> 00:00:37,880 różne rzeczy! 12 00:00:37,880 --> 00:00:38,850 >> Bardzo prosta - 13 00:00:38,850 --> 00:00:41,820 Jestem po prostu porównując s przed t, a jeśli są one równe, 14 00:00:41,820 --> 00:00:43,250 drukując tyle. 15 00:00:43,250 --> 00:00:45,450 Załóżmy, skompilować i uruchomić ten program. 16 00:00:45,450 --> 00:00:51,950 Dodać Porównaj 0. / Porównanie 0, coś powiedzieć, hello, 17 00:00:51,950 --> 00:00:54,200 powiedzieć coś, witam. 18 00:00:54,200 --> 00:00:56,870 >> Niestety, program myśli mam wpisane różne rzeczy, choć 19 00:00:56,870 --> 00:00:59,530 wyraźnie wpisane "hello" w ten sam sposób za każdym razem. 20 00:00:59,530 --> 00:01:00,850 Teraz, dlaczego może to być? 21 00:01:00,850 --> 00:01:03,750 >> Cóż, okazuje się, że wszystko Czas, struny były nieco bardziej 22 00:01:03,750 --> 00:01:06,780 złożone niż ciąg znaków pod wyciągiem. 23 00:01:06,780 --> 00:01:11,450 W rzeczywistości, łańcuch jest wskaźnik lub adres, w szczególności adres 24 00:01:11,450 --> 00:01:14,640 od pierwszego znaku, który sekwencja znaków. 25 00:01:14,640 --> 00:01:18,640 >> I tak, gdy porównamy s przed t z jednakowym znakiem równości, jesteśmy 26 00:01:18,640 --> 00:01:23,200 faktycznie pytaniem, jest to adres równe równe tym adresem? 27 00:01:23,200 --> 00:01:26,850 I że nie będzie to w przypadku, gdy Filmaster wpisane w dwóch różnych 28 00:01:26,850 --> 00:01:30,370 smyczki i mamy nazywa GetString dwa razy się je, ponieważ pamięć 29 00:01:30,370 --> 00:01:34,480 że GetString używa do przechowywania pierwszy Ciąg może być tutaj w pamięci RAM, ale 30 00:01:34,480 --> 00:01:37,120 pamięci, że GetString używa do przechowywania Drugi ciąg będzie 31 00:01:37,120 --> 00:01:38,760 tu być w pamięci RAM. 32 00:01:38,760 --> 00:01:42,380 I oczywiście, następnie te dwa kawałki pamięci mają różne adresy 33 00:01:42,380 --> 00:01:44,220 ich bardzo pierwsze znaki. 34 00:01:44,220 --> 00:01:46,120 >> Tak jest y równa równa t? 35 00:01:46,120 --> 00:01:46,885 Cóż, nie. 36 00:01:46,885 --> 00:01:50,510 Jeśli s i t są skierowane do różnych fragmenty pamięci, tak jak byłyby przez 37 00:01:50,510 --> 00:01:54,140 dzwoniąc GetString dwukrotnie, że nie są, w rzeczywistości, będzie taki sam. 38 00:01:54,140 --> 00:01:57,700 Tak więc wydaje się, tak, że z porównać dwa ciągi w intuicyjny 39 00:01:57,700 --> 00:02:01,050 sposób, że oczekujemy, znaków dla charakter, potrzebujemy innej techniki 40 00:02:01,050 --> 00:02:02,300 całkowicie. 41 00:02:02,300 --> 00:02:03,902