1 00:00:00,000 --> 00:00:00,520 2 00:00:00,520 --> 00:00:03,530 >> ALTAVEU: Anem a escriure un programa que sol · licita a l'usuari dues cadenes i 3 00:00:03,530 --> 00:00:07,170 informa si aquestes cadenes són els mateixos o no la mateixa. 4 00:00:07,170 --> 00:00:10,290 Jo ja he començat a nosaltres fora d'aquí per trucar a printf dues vegades i cridar 5 00:00:10,290 --> 00:00:14,520 GetString dues vegades, emmagatzemant el retorn valors en si i t, respectivament. 6 00:00:14,520 --> 00:00:17,960 >> Ara, els meus instints per comparar aquests dos cordes seria utilitzar el familiar 7 00:00:17,960 --> 00:00:19,160 operador d'igualtat - 8 00:00:19,160 --> 00:00:22,070 si s és igual a és igual a t. 9 00:00:22,070 --> 00:00:28,120 Llavors vaig a seguir endavant i d'impressió out "S'ha escrit la mateixa cosa! 10 00:00:28,120 --> 00:00:35,190 Si no, si això no és cert, estic simplement va a escriure printf ("S'ha escrit 11 00:00:35,190 --> 00:00:37,880 coses diferents! 12 00:00:37,880 --> 00:00:38,850 >> Bastant senzill - 13 00:00:38,850 --> 00:00:41,820 Jo simplement estic comparant s contra t, i si són iguals, 14 00:00:41,820 --> 00:00:43,250 imprimir tant. 15 00:00:43,250 --> 00:00:45,450 Anem a compilar i executar aquest programa. 16 00:00:45,450 --> 00:00:51,950 Fer compara 0. / Comparar 0, dir alguna cosa, hola, 17 00:00:51,950 --> 00:00:54,200 dir alguna cosa, hola. 18 00:00:54,200 --> 00:00:56,870 >> Desafortunadament, el programa pensa que he escrit coses diferents, tot i que 19 00:00:56,870 --> 00:00:59,530 clarament escrit "hola" l' mateixa manera en ambdues ocasions. 20 00:00:59,530 --> 00:01:00,850 Ara, per què serà? 21 00:01:00,850 --> 00:01:03,750 >> Bé, resulta que tot això temps, les cadenes han estat una mica més 22 00:01:03,750 --> 00:01:06,780 complexa que una seqüència de caràcters sota de la caputxa. 23 00:01:06,780 --> 00:01:11,450 En realitat, una cadena és un punter o direcció, específicament la direcció 24 00:01:11,450 --> 00:01:14,640 del primer caràcter que seqüència de caràcters. 25 00:01:14,640 --> 00:01:18,640 >> I així, quan comparem s contra t amb el signe igual igual, estem 26 00:01:18,640 --> 00:01:23,200 en realitat preguntant, és aquesta adreça igual igual a aquesta direcció? 27 00:01:23,200 --> 00:01:26,850 I això no serà el cas si l'usuari ha escrit en dos diferents 28 00:01:26,850 --> 00:01:30,370 cordes i hem cridat a GetString dues vegades per aconseguir-los, perquè la memòria 29 00:01:30,370 --> 00:01:34,480 que GetString s'utilitza per emmagatzemar la primera cadena podria estar aquí a la memòria RAM, però el 30 00:01:34,480 --> 00:01:37,120 memòria que GetString s'utilitza per emmagatzemar la segona cadena es va 31 00:01:37,120 --> 00:01:38,760 d'estar aquí a la RAM. 32 00:01:38,760 --> 00:01:42,380 I, per descomptat, llavors, aquests dos trossos de memòria tenen diferents direccions per 33 00:01:42,380 --> 00:01:44,220 seus primers personatges. 34 00:01:44,220 --> 00:01:46,120 >> Així s igual igual a t? 35 00:01:46,120 --> 00:01:46,885 Bé, no. 36 00:01:46,885 --> 00:01:50,510 Si s i t estan apuntant a diferents fragments de memòria, ja que seria per 37 00:01:50,510 --> 00:01:54,140 trucant GetString dues vegades, no ho són, de fet, serà la mateixa. 38 00:01:54,140 --> 00:01:57,700 Per tant, sembla ser el cas que a comparar dues cadenes al intuïtiu 39 00:01:57,700 --> 00:02:01,050 manera que esperem, el caràcter de caràcter, necessitem una altra tècnica 40 00:02:01,050 --> 00:02:02,300 completament. 41 00:02:02,300 --> 00:02:03,902