1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> SPEAKER: Să scrie un program care solicită utilizatorului pentru două șiruri și 3 00:00:03,530 --> 00:00:07,170 apoi raportează dacă aceste siruri de caractere sunt la fel sau nu identice. 4 00:00:07,170 --> 00:00:10,290 Am ne-am început deja de pe aici de apel printf de două ori și de asteptare 5 00:00:10,290 --> 00:00:14,520 GetString de două ori, stocarea revenirea valori în s și t, respectiv. 6 00:00:14,520 --> 00:00:17,960 >> Acum, instinctele mele pentru a compara aceste două siruri de caractere ar fi utilizarea familiar 7 00:00:17,960 --> 00:00:19,160 operator de egalitate - 8 00:00:19,160 --> 00:00:22,070 dacă s egal este egal cu t. 9 00:00:22,070 --> 00:00:28,120 Apoi, am de gând să merg mai departe și de imprimare out "Ai tastat același lucru! 10 00:00:28,120 --> 00:00:35,190 Altfel, dacă nu e adevărat, eu sunt pur și simplu O să tip printf ("Ai tastat 11 00:00:35,190 --> 00:00:37,880 lucruri diferite! 12 00:00:37,880 --> 00:00:38,850 >> Destul de simplu - 13 00:00:38,850 --> 00:00:41,820 Eu pur și simplu e comparat împotriva t, iar în cazul în care acestea sunt egale, 14 00:00:41,820 --> 00:00:43,250 imprimarea la fel de mult. 15 00:00:43,250 --> 00:00:45,450 Să compila și rula acest program. 16 00:00:45,450 --> 00:00:51,950 Face comparație 0. / Compara 0, spune ceva, salut, 17 00:00:51,950 --> 00:00:54,200 spune ceva, salut. 18 00:00:54,200 --> 00:00:56,870 >> Din păcate, programul crede că am tastat lucruri diferite, chiar dacă am 19 00:00:56,870 --> 00:00:59,530 tastat în mod clar "hello" același mod în ambele cazuri. 20 00:00:59,530 --> 00:01:00,850 Acum, de ce ar fi asta? 21 00:01:00,850 --> 00:01:03,750 >> Ei bine, se pare că toate acestea timp, siruri de caractere au fost un pic mai mult 22 00:01:03,750 --> 00:01:06,780 complexă decât o secvență de caractere sub capota. 23 00:01:06,780 --> 00:01:11,450 În realitate, un șir este un pointer sau o adresa, în mod specific adresa 24 00:01:11,450 --> 00:01:14,640 a primului caracter în care secvență de caractere. 25 00:01:14,640 --> 00:01:18,640 >> Așa că atunci când ne-am compara s împotriva t cu semnul egal egal, suntem 26 00:01:18,640 --> 00:01:23,200 de fapt cere, este această adresă irilor la această adresă? 27 00:01:23,200 --> 00:01:26,850 Și că nu va fi cazul dacă utilizatorul a tastat în două diferite 28 00:01:26,850 --> 00:01:30,370 siruri de caractere și le-am numit getString de două ori pentru a le obține, pentru că memoria 29 00:01:30,370 --> 00:01:34,480 care getString utilizează pentru a stoca primul șir ar putea fi aici în RAM, dar 30 00:01:34,480 --> 00:01:37,120 memorie care getString utilizează pentru a stoca al doilea șir se întâmplă 31 00:01:37,120 --> 00:01:38,760 să fiu aici în RAM. 32 00:01:38,760 --> 00:01:42,380 Și, bineînțeles, atunci, aceste două bucăți de memorie au adrese diferite pentru 33 00:01:42,380 --> 00:01:44,220 foarte primele caractere. 34 00:01:44,220 --> 00:01:46,120 >> Deci, este s egal egal cu t? 35 00:01:46,120 --> 00:01:46,885 Ei bine, nu. 36 00:01:46,885 --> 00:01:50,510 În cazul în care s și t sunt orientate la diferite bucăți de memorie, cum ar fi de 37 00:01:50,510 --> 00:01:54,140 apel getString de două ori, ei nu sunt, în fapt, va fi la fel. 38 00:01:54,140 --> 00:01:57,700 Deci, se pare să fie cazul în care a compara doua siruri de caractere în intuitiv 39 00:01:57,700 --> 00:02:01,050 astfel încât ne așteptăm, de caractere pentru caracter, avem nevoie de o alta tehnica 40 00:02:01,050 --> 00:02:02,300 totul. 41 00:02:02,300 --> 00:02:03,902