1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> SPRECHER: Lassen Sie uns ein Programm schreiben, dass fordert den Benutzer für zwei Zeichenfolgen und 3 00:00:03,530 --> 00:00:07,170 berichtet dann, ob diese Zeichenfolgen sind gleich oder nicht gleich sind. 4 00:00:07,170 --> 00:00:10,290 Ich habe bereits hier von uns begann zweimaligen Aufruf printf und Aufrufen 5 00:00:10,290 --> 00:00:14,520 GetString zweimal, Speichern des Rück Werte in s bzw. t. 6 00:00:14,520 --> 00:00:17,960 >> Nun, meine Instinkte, diese beiden vergleichen Saiten wäre das vertraute zu bedienen 7 00:00:17,960 --> 00:00:19,160 Gleichheitsoperator - 8 00:00:19,160 --> 00:00:22,070 wenn s gleich t entspricht. 9 00:00:22,070 --> 00:00:28,120 Dann werde ich nach vorne gehen und drucken out "Sie gaben die gleiche Sache! 10 00:00:28,120 --> 00:00:35,190 Else, bin ich, wenn das ist einfach nicht wahr printf geben werde ("Sie getippt 11 00:00:35,190 --> 00:00:37,880 verschiedene Dinge! 12 00:00:37,880 --> 00:00:38,850 >> Ziemlich einfach - 13 00:00:38,850 --> 00:00:41,820 Ich bin einfach vergleichen s gegen t, und wenn sie gleich sind, 14 00:00:41,820 --> 00:00:43,250 Drucken Sie so viel. 15 00:00:43,250 --> 00:00:45,450 Lassen Kompilieren und Ausführen dieses Programms. 16 00:00:45,450 --> 00:00:51,950 Machen Sie vergleichen 0. / Vergleichen 0, etwas sagen, hallo, 17 00:00:51,950 --> 00:00:54,200 etwas sagen, hallo. 18 00:00:54,200 --> 00:00:56,870 >> Leider denkt, das Programm habe ich eingegeben verschiedene Dinge, auch wenn ich 19 00:00:56,870 --> 00:00:59,530 klar typisiert "Hallo" die gleiche Weise beide Male. 20 00:00:59,530 --> 00:01:00,850 Nun, warum könnte das sein? 21 00:01:00,850 --> 00:01:03,750 >> Nun stellt sich heraus, dass dies alles Zeit haben die Saiten ein bisschen mehr gewesen 22 00:01:03,750 --> 00:01:06,780 komplexer als eine Folge von Zeichen unter der Haube. 23 00:01:06,780 --> 00:01:11,450 In Wirklichkeit ein String ist ein Zeiger oder Adresse, nämlich die Adresse 24 00:01:11,450 --> 00:01:14,640 das erste Zeichen, dass Folge von Zeichen. 25 00:01:14,640 --> 00:01:18,640 >> Und so, wenn wir vergleichen, s gegen t mit dem Gleichheitszeichen gleich, wir sind 26 00:01:18,640 --> 00:01:23,200 tatsächlich fragen, ist diese Adresse gleich gleich an diese Adresse? 27 00:01:23,200 --> 00:01:26,850 Und das wird nicht der Fall sein, wenn der Benutzer in zwei verschiedenen typisierten 28 00:01:26,850 --> 00:01:30,370 Saiten und wir haben zweimal aufgerufen GetString um sie zu bekommen, weil der Speicher 29 00:01:30,370 --> 00:01:34,480 dass GetString verwendet, um den ersten zu speichern String könnte hier im RAM, aber die 30 00:01:34,480 --> 00:01:37,120 Speicher, der GetString verwendet, um zu speichern der zweite String wird 31 00:01:37,120 --> 00:01:38,760 hier im RAM sein. 32 00:01:38,760 --> 00:01:42,380 Und dann natürlich diese beiden Stücke von Speicher unterschiedliche Adressen für 33 00:01:42,380 --> 00:01:44,220 ihre erste Zeichen. 34 00:01:44,220 --> 00:01:46,120 >> So ist s gleich gleich t? 35 00:01:46,120 --> 00:01:46,885 Nun, nein. 36 00:01:46,885 --> 00:01:50,510 Wenn s und t sind verschiedenen Zeige Stücke der Erinnerung, wie sie von sein 37 00:01:50,510 --> 00:01:54,140 Aufruf GetString zweimal, sind sie nicht, In der Tat würde die gleiche sein. 38 00:01:54,140 --> 00:01:57,700 So scheint es so zu sein, dass, um Vergleich von zwei Zeichenfolgen in der intuitiven 39 00:01:57,700 --> 00:02:01,050 Weise, die wir erwarten, Charakter für Charakter, brauchen wir eine andere Technik 40 00:02:01,050 --> 00:02:02,300 insgesamt. 41 00:02:02,300 --> 00:02:03,902