GŁOŚNIK: Chcę napisać program, który pyta użytkownika o dwóch strunach i następnie informuje, czy te struny są takie same lub nie same. Już zaczęło nam się tutaj dzwoni dwa razy i wywołanie printf GetString dwukrotnie, przechowywania powrót Wartości w s i t, odpowiednio. 

Teraz, moje instynkty porównać te dwa ciągi byłoby użyć zaznajomieni Operator równości - jeśli y jest równa równa t. Potem mam zamiar iść do przodu i drukuj z "Wpisano to samo! Innego, jeśli to nie jest prawda, jestem po prostu będzie wpisać printf ("Wpisano różne rzeczy! 

Bardzo prosta - Jestem po prostu porównując s przed t, a jeśli są one równe, drukując tyle. Załóżmy, skompilować i uruchomić ten program. Dodać Porównaj 0. / Porównanie 0, coś powiedzieć, hello, powiedzieć coś, witam. 

Niestety, program myśli mam wpisane różne rzeczy, choć wyraźnie wpisane "hello" w ten sam sposób za każdym razem. Teraz, dlaczego może to być? 

Cóż, okazuje się, że wszystko Czas, struny były nieco bardziej złożone niż ciąg znaków pod wyciągiem. W rzeczywistości, łańcuch jest wskaźnik lub adres, w szczególności adres od pierwszego znaku, który sekwencja znaków. 

I tak, gdy porównamy s przed t z jednakowym znakiem równości, jesteśmy faktycznie pytaniem, jest to adres równe równe tym adresem? I że nie będzie to w przypadku, gdy Filmaster wpisane w dwóch różnych smyczki i mamy nazywa GetString dwa razy się je, ponieważ pamięć że GetString używa do przechowywania pierwszy Ciąg może być tutaj w pamięci RAM, ale pamięci, że GetString używa do przechowywania Drugi ciąg będzie tu być w pamięci RAM. I oczywiście, następnie te dwa kawałki pamięci mają różne adresy ich bardzo pierwsze znaki. 

Tak jest y równa równa t? Cóż, nie. Jeśli s i t są skierowane do różnych fragmenty pamięci, tak jak byłyby przez dzwoniąc GetString dwukrotnie, że nie są, w rzeczywistości, będzie taki sam. Tak więc wydaje się, tak, że z porównać dwa ciągi w intuicyjny sposób, że oczekujemy, znaków dla charakter, potrzebujemy innej techniki całkowicie.