[REPRODUCCIÓ DE MÚSICA] DAVID Malan: D'acord. Això és CS50, i això és el cap de setmana 2. Ho sento molt que no podia ser allà amb tots vostès avui, però vostè està en molt bones mans. Permeteu-me presentar- Pròpia Bowden Rob CS50. ROB BOWDEN: I, per descomptat, a continuació, hem de burlar-se del fet que ell ens va enviar vertical vídeo i mostrar això. [REPRODUCCIÓ DE VÍDEO] [REPRODUCCIÓ DE MÚSICA] [PASSOS] -Aquest Vídeo no va fer cal mirar d'aquesta manera. Podria haver-se evitat. Digui no als vídeos verticals. Vídeos -vertical succeeixen quan sostenir la càmera pel camí equivocat. El vídeo acaba assemblant-se a una merda. - [RONC] -Hi Ha Més i més persones addictes per fer vídeos verticals cada dia. No és el crac o res, però tot i així és molt dolent. Hi ha dos tipus diferents de persones que pateixen de VVS. El primer grup tracta la vídeos disparen com imatges. Ells no signifiquen cap mal. Ells simplement no entenen que mentre que vostè pot donar volta a una imatge, realment no es pot convertir un vídeo. [CRASH] - [MONO SOUNDS] -El Un altre grup és la gent que no donen una [SENYAL]. Síndrome de vídeo -vertical és perillós. Les imatges en moviment tenen sempre ha estat horitzontal. Les televisions són horitzontals. Les pantalles d'ordinador són horitzontals. Ulls de la gent són horitzontals. No estem fets per veure vídeos verticals. -Em Encanta vídeos verticals. -Ningú Es preocupa per tu. -Si D'aquest problema no es controla, vostè també començarà mostrant quatre vídeos alhora només per estalviar ample de banda. Vídeos verticals -Letterboxed faria ser de la mida d'un segell de correus. -I S'estendrà per tot arreu. Pantalles de cinema tenen sempre ha estat horitzontal. Si vídeos verticals esdevenen , Cinemes acceptades haurà de ser alt i flac. -I Tots els cinemes faria ha d'aconseguir demolit i reconstruït. I en el moment en què van ser reconstruïts, Mila Kunis seria vella i lletja. -aus S'estavellarà contra ells i morir. Ll del `tot s'endureixen colls d'mirant cap amunt. -I Ningú va a seure a la primera fila mai més. -George Lucas tornarà a l'alliberament de l'estrella Guerres nou-- l'edició flac. -Jo Mai va ser realment capaç de dir la història que volia explicar. Aquesta va ser una gran oportunitat per a mi experimentar amb una nova tecnologia. -Ets Un idiota. -Cada Vegada que un dispositiu mòbil s'utilitza per gravació de vídeo, la temptació hi és. Només dir que no. Digues no a George Lucas. Digues no a la vella Mila Kunis. Digui no als vídeos verticals. -I Si veus algú fent, diguem-ne, "no s'està disparant aquesta fictícia dret!" [REPRODUCCIÓ DE MÚSICA] [FI DE REPRODUCCIÓ] [Aplaudiments] [AUDIO] ROB BOWDEN: --simple forma de criptografia, que és bàsicament el xifrat i desxifrat de missatges secrets. Així que aquí tenim una molt simple joguina. I la idea és l'anell exterior gira al voltant de l'anell interior. I es pot veure, potser si el zoom en, que-- és difícil de veure. Però, igual que, el nombre 1-- així, que es movia. El número 1 s'assigna a la lletra X, número 2 mapes a la carta J. increïblement difícil no saltar cap endavant. Carta 2 s'assigna a J. Número 3 s'assigna a D. Per tant amb aquest anell es pot donar algú un missatge d'1, 2, 3. Per alguna raó vostè vull dir-los XJD. Però vostè pot donar-los algun missatge de nombres, i sempre que que tenen aquest anell, que pot desxifrar el que estàs tractant de dir. Així que vostè pot haver vist aquest exemple particular de la criptografia abans si la volta de la temporada de Nadal has vist una història de Nadal. Si mai has vist abans, a continuació, només encengui TBS a, literalment, qualsevol moment el dia de Nadal, perquè simplement ho mostren esquena amb esquena amb esquena amb esquena amb esquena tot el dia. I el vídeo rellevant és la següent. [REPRODUCCIÓ DE VÍDEO] -sigui Coneix a tothom que Ralph Parker és present nomenat membre de la Petita Orphan Annie cercle secret i té dret a tots els honors i els beneficis que ocorren al mateix. Signat petita òrfena Annie. Ratificat Pierre Andre en tinta! Honors i beneficis Ja a l'edat de nou! [CRIDA DE RÀDIO] -Vine. Seguirem endavant amb ella. No necessito tot aquest jazz sobre contrabandistes i pirates. -Escolta Demà a la nit amb l'aventura de conclusió del Negre del vaixell pirata. Ara, és el moment per Missatge secret d'Annie per a vostès membres del Cercle Secret. Recordeu que els nens, els únics membres d'Annie cercle secret pot descodificar missatge secret d'Annie. Recordeu, Annie depèn de tu. Definiu les seves passadors a B2. Aquí està el missatge. 12. 11. 2. -Estic En la meva primera reunió secreta. -25. 14. 11. 18. 16. -Oh, Pierre està en gran nit de veu. Em vaig adonar que aquesta nit missatge era realment important. -3. 25. Aquest és un missatge d'Annie si mateixa. Recordeu, no l'hi diguis a ningú. -Cinc Segons més tard, estic en l'únic habitació de la casa on un nen de nou anys podia seure a la intimitat i la descodificació. Vés per on! B! Vaig anar a la següent. E. La primera paraula és "ser". S. Venia més fàcil ara. U. 25. Això és R. -Anem, Ralphie! He d'anar! -Vaig A estar ben baix, Ma! Whiz Gee. T. O. "Assegureu-vos de" - assegureu-vos que? Quina va ser la huerfanita Annie tractant de dir? Assegureu-vos que? -Randy Ha d'anar! Si us plau, sortir? Dret -Tots, mama! Estaré fos cert! Jo estava més a prop ara. La tensió era terrible. Què va ser? El destí del planeta pot penjar d'un fil! -Ralphie, Randy ha d'anar! -Vaig A estar ben a terme, per l'amor de Déu! Casi allà! Els meus dits volaven. La meva ment era un parany d'acer. Cada porus vibrar. Era gairebé clar! Sí. Sí. Sí. Sí. Assegureu-vos de beure la seva Ovaltine. Ovaltine? Un comercial de mala mort? Fill de puta. [FI DE REPRODUCCIÓ] ROB BOWDEN: Així que és com Ovaltine refereix a la criptografia. Bàsicament CS50 simplement anuncien Ovaltine, pel que vam poder ser un comercial de mala mort per Ovaltine. Tot bé. Així que ara la ciència actual equip. Recordeu que dilluns el deixem busseig profund en cordes. Així que estàvem tractant amb la cadena "Zamyla." I estàvem reconeixent el fet que podem tractar "Zamyla" com una seqüència de caràcters. I recordem que hem après la notació suport. Així que si això es van emmagatzemar en una cadena "s", després si diguéssim s suport de 0, que ho faria indicar la Z. lletra majúscula I si diguéssim s suport 1, que indicaria la primera minúscula, i així successivament fins s brida 5, el que indicaria l'última a. Ara recordeu que el longitud d'aquesta cadena és 6, però els índexs en la cadena són 0 a 5, Z a través d'aquest durar. Així que això ara s'inscriu en un panorama més ampli de la memòria del seu ordinador, la seva memòria RAM. Per tant el programa que alguna part vostè està funcionant el seu ordinador cal recordar Zamyla en algun lloc de la memòria. Així que puc tenir un voluntari? Si, siusplau. ¿I quin és el seu nom? DEAN: Dean. ROB BOWDEN: Dean? Encantat de conèixer-te, Dean. Així que veuen aquí, i anem a haver de dibuixar en el nostre bonic disseny enginyós de la memòria. Ara m'agrada pensar en la memòria com una tira llarga de bytes, però només amb fins d'exhibició anem simplement d'esquerra a dreta, de dalt a baix. D'ACORD? Així que vaig a mostrar una program-- Getstrings.c. I pel que tot aquest programa és fent és demanar quatre cordes per part de l'usuari amb GetString d'impressió i després el que primer va entrar en cadena era. Estem fent cas omís del dos al quatre. D'ACORD. Així que aquí ara-- quan Jo primer s1 petició. Així que vostè és l'ordinador. I va a implementar GetString. Així que vostè sol · licita una cadena de mi, i jo dic, està bé, Dean. Donar la cadena "Dean". Així en algun lloc de memòria que recordar "Dean". Així que escriure en la memòria algun lloc. Perfecte. D'ACORD. Així que ara que hem S2. I s2 serà una petició a GetString. Així que vaig a entrar en una cadena. Vaig a entrar a "Hannah". Així, entre "Hannah" en algun lloc a la memòria. Sí. A-H. OK, així que ara s3. I serà un altre sol·licitar a GetString. I el que ara escriviu "Maria". Tot bé. I després hi ha una última sol·licitud a GetString, s4. Així que, jo no ho sé. Què tal anem amb antidisestablishmentarianism. Així que entrar en aquesta en la memòria. Sí. Així que fer "Rob". D'ACORD. Així que ara explain-- per què deixa aquests espais? Per què té això en blanc espai aquí, aquí, i aquí dalt? Sí. Així notar quan vaig imprimir s1-- així que si ens tenia en marxa "Hannah" just al costat de "Dean" Com sabem quan la cadena "Dean" acaba? Així que la impressió de la cadena s1 pot tenir acaba d'imprimir "DeanHannahMariaRob" si no té cap pista quan "Dean" en realitat acaba. Tot bé. Així que en la memòria la forma en què realment representar aquest final d'una cadena és amb barra invertida zero. Així que aquest espai és exactament el que volíem. Ha de ser una barra invertida zero. Aquesta serà una barra invertida zero, i això serà una barra invertida zero. I vostè pot tenir un fabulós premi per ser un voluntari perfecte. Prengui una bola de la tensió! D'ACORD. Així que aquesta barra invertida caràcter zero és com indicar el final d'una cadena. És la forma en què un programa determinat vol imprimir una cadena, és com-- recordem que vam aprendre la funció strlen la setmana passada? Longitud de la cadena? És la forma de longitud de la cadena és capaç de determinar quant de temps una cadena és. Simplement segueix iterant sobre els caràcters fins que troba el barra invertida caràcter zero. Així que l'important adonar- sobre el caràcter de barra invertida zero S'està representat per tots els zeros en els bits. Així adonar que això és diferent del caràcter zero. Així que el caràcter zero, si vostè recorda en l'exemple que ha donat al final de la conferència on els personatges mapa A-- com mapes Capital a 65. Minúscula mapes a 97. B minúscula seria 98. Així que el nombre 0 mapes A-- no ho faig saber de la part superior del meu cap. 44 o 45. En algun lloc en aquesta regió. Així que el caràcter 0 és un nombre real. Però zero barra invertida mapes a tots els bits zero. Així que hi ha una distinció entre barra invertida zero, que anomenarem el terminador nul. Hi ha una distinció entre barra invertida zero i el caràcter zero. Tot bé. Així que parlar una mica més sobre les cordes. Així que veiem aquí és així com seria distribuïda en la memòria. Així que aquesta idea de cadenes com una seqüència de characters-- pel que l'equip oficial sciency termini per a la seqüència és una matriu. Així que podríem anomenar una cadena una sèrie de caràcters. I en realitat hi ha altres dades tipus que podem fer arranjaments de. Així que per motivar això, mira un exemple. L'anomenarem ages0.c vaig copiar i enganxar la nostra plantilla. D'ACORD. Així que en aquest programa el que voler fer és agafar l'edat de tres estudiants en el curs. Així sabem que el int age-- i ara vaig a dir 0. Així que és possible que vulgueu dir edad1, però a efectes que veurem en breu, Vaig a dir int age0 equival getInt. Així que la mateixa crida a getInt que hem estat utilitzant jo no passar a ser incitant dient: "dóna'm l'edat." Però just sol·liciti. I edad1 equival getInt. I int edat2 equival getInt. Així que, de nou, tres estudiants, però en última instància, els índexs variables són age0 través edat2. D'ACORD. Així que aquest programa va a fer el que sigui que volem amb age0, edad1 i edat2, però aquest programa en última instància funciona per tres estudiants. D'ACORD. Així que ara el que si vull quatre estudiants? Bé, vaig a haver de tornar en el meu codi, canviar el comentari, i ara tenim un int edad3 equival getInt. D'ACORD. Així que veu el problema aquí? Quin és el problema amb aquest tipus de configuració? Sí. Sí. Així que estem creant un variable per a cada estudiant. Ara que funciona, però en última instància, què passa si ara dic: "Vull prendre l'edat de vuit estudiants o 16 estudiants o els però molts estudiants de els centenars d'estudiants en CS50 o els milers d'estudiants al campus o els milers de milions de persones al món? Així que en última instància, això no és sostenible. Cada vegada que es veu a si mateix copiant i enganxar el codi d'aquest tipus, en general, ha de sentir que hi ha una millor manera. Així que aquí és on introduïm una declaració de matriu. Així que quan es declara una matriu, això és el que el format general va ser similar. Anem a dir que el tipus. i després anem a donar el nom d'aquesta matriu, tal com el definim cap variable donada. I, finalment, estem utilitzant aquesta notació suport de nou però en un context diferent de com estàvem usant abans. Així que aquí això sembla normal declaració de variables que hem vist. Així que hem vist int x punt i coma abans. Bé, ara podríem veure alguna cosa com int x suports maig. I posar aquesta idea en la Programa getInt que tener-- pel que podem posar en pràctica això de la mateixa manera. Diguem que en CS tendim a utilitzar n com el nombre d'alguna cosa. Així que aquí anem a emmagatzemar quatre estudiants. I ara podem dir int edat suport no N- prou aconseguir-yet-- per declarar una matriu de quatre estudiants. Llavors, com això es veurà en memòria serà similar a aquest. Desactiveu aquesta. I tindrem un lloc en memory-- posaré aquesta allà dalt. Així en algun lloc de la memòria. Un dos tres quatre. Tenim quatre sencers en una fila per a aquesta sèrie de quatre nombres enters. Així, en l'actualitat, quin és la mida d'una d'aquestes caixes? Sí. És quatre bytes. És de 32 bits. Així que ara això és diferent de la matriu que ens va veure anteriorment, el conjunt de caràcters. En una cadena de cada caixa va ser només un byte, perquè un personatge és només un byte. Però amb una matriu d'enters, cadascun caixa ha de ser 4 bytes en ordre per adaptar-se a tot un número sencer. Així que això és el que una sèrie de quatre sencers es veuria així. I després de tornada a codi. Ara volem realment botiga sencers en aquesta matriu. Així que ara aquest és un molt, molt, molt patró comú que en algun punt convertit en la memòria muscular. Així int i és igual a 0. i menor que n. i plus plus. Grup d'edat i és igual getInt. Així que aquest bucle, aquest format, vostè ha d'aconseguir molt acostumat. Així que això és en general la forma en què ho farem iterar sobre gairebé qualsevol matriu. Ara noti aquest tipus de explica per què des del principi que no teníem per als bucles d'anar per int i és igual a 1, i de menys de o igual a 10. La raó és que a partir de zero fa que aquest treball bé amb matrius. Així que les matrius són zero indexats. Si aquesta matriu és de longitud 4, els índexs són del 0 al 3. Així que a través de la primera iteració d'aquest bucle for establirem l'edat Suport 0 igual a una crida a getInt. Així que el que em va passar per entrar en el teclat. En el segon pas, estem l'establiment de edad1 igual a getInt. Tercer pas, edat2. Edad3 passi final. Així que si a la primera passada del bucle Entro al número 4 en el teclat, llavors anem a inserir un 4 aquí. Si en la segona passada entro 50, posarem un 50 aquí. En el tercer pas que podria entrar en negatiu 1, 1 negatiu, i, finalment, si entro 0-- i Ara recordeu que això era Índex 03:00. Després de bucle, i és serà incrementat a 4. i ja no és menor que n, que és 4. I partim fora del circuit. Llavors, què hauria de dolent això? [Inaudible]? AUDIÈNCIA: [inaudible] Sí. Així que l'array només té quatre llocs, el que significa que els índexs de 0 a 3. Així que si aquest fos el cas, ho faria prendre el valor 4 en algun moment. grup d'edat 4 serà la creació qualsevol cosa que estigui per aquí el que he de dir, introdueixi 6. Això va a configurar aquesta a 6. Però no sabem el que hi ha per aquí. Això no és memòria que teníem accés. Així que si vostè recorda de la conferència anterior, que estava imprimint valors de Zamyla i en algun moment ell va colpejar aquesta segmentació criticar. Així que probablement va a veure molts errors de segmentació com vostè posar en pràctica alguns dels conjunts de problemes. Però aquesta és una de les formes en què vostè pot trobar una segmentació culpa, quan s'inicia l'accés la memòria de manera que no ha de ser. Així que no tenim accés a aquest lloc i això és un error. Així que això és millor. Ara hi ha encara una petita problema amb aquest codi. I això és bàsicament que som segueix estancat en quatre estudiants. Ara bé, si vull fer servir vuit estudiants, OK. No és gran cosa. Puc entrar, canviar la comentar i canviar n. Ara això funcionarà amb vuit estudiants. Si Va compilar això i córrer això, es mostrarà mi-- sol·licitarà sencers per a vuit estudiants i s'acaba de treballar. Però és menys que ideal a necessitar recompilar el programa cada vegada Vull canviar el nombre d'estudiants que vull entrar en les edats per. Així la millora final sobre això, com veurem aquí-- estem va a sol·licitar el nombre de persones. Aquí tenim un nombre de les persones a les habitacions o qualsevol edats de les persones a l'habitació. Però anem a sol·licitar el nombre de persones a la sala per part de l'usuari. Així que aquest és exactament el mateix do-while bucle que hem vist abans. És exactament el mateix do-while que es pot implementar en el set problema. Així que, mentre que són entrar en un n menys d'1, per la qual cosa no ha d'estar en almenys una persona a l'habitació. Com sempre que siguin entrar en un n menys d'1, llavors seguirem fent de nou. Si us plau, introduïu el número de persones a l'habitació. Ara, una vegada que tinguem el nombre de persones al habitació-- pel que podria entrar en que hi ha 200 persones en aquesta sala. Llavors aquí anem a venir i declarar una matriu de mida 200. Estem declarant matriu que és prou gran com per contenir 200 edats. En baixar, és el bucle for que vostè aconseguirà molt acostumat. Així iterar sobre aquesta matriu, assignant a cada ubicació en aquesta matriu un enter, i a continuació, en última instància, aquí estem només aconseguir un exemple de la iteració sobre aquesta matriu, no per assignar valors, però per accedir valors. Així que aquí veiem que estan dient, d'un any a partir d'ara, física% i estarà% i anys d'edat, on el primer% i és i + 1. Així que i és la variable d'índex. I la segona% i serà el valor emmagatzemat en la matriu edats més 1. Així que aquesta més 1 és només perquè som dient-- aquesta més 1, i mai 1 edats. Aquest plus 1 és només perquè som dient: un any a partir d'ara la persona serà aquest vell. Llavors per què és això que mai 1? Per què tenim un plus 1 allà? Sí. Sí. Així que recordi matrius són zero indexats. Així que si estem imprimint això per algú que acaba de llegir la sortida, llavors probablement volen veure alguna cosa com a persona un, persona número u, serà de 20 anys d'edat. Persona número dos serà de 15 anys d'edat. Ells preferirien no veure persona número zero és de 15 anys d'edat. Així que la compilació d'això i només veure el que sembla com-- Crear un espai. Fer edats compilacions. Execució de les edats. Veiem nombre de persones a l'habitació. Així que vaig a dir que hi ha tres persones a l'habitació. Edat de la persona número u, diguem 15, 20, 25. I ara vaig a dir aquí a un any ara van a ser 16, 21, 26. Anem a veure que això funciona amb 1 n que no és igual a 3. Així que si dic nombre de persones és 5, un, dos, tres, dos, un, dins d'un any van a ser dos, tres, quatre, tres, dos anys d'edat. Així que vaig poder igual fàcilment n han de ser 10.000. Ara vaig a estar assegut aquí durant bastant un temps d'entrar a les edats, però això funciona. Així que ara a la memòria algun lloc ens tenir una matriu de mida 10000, així que en última instància 40000 bytes, perquè hi ha 4 bytes per a cada un d'aquests nombres enters. Així que hi ha una gran varietat de mida de 10.000 en el que puguem emmagatzemar les edats d'aquestes 10.000 persones. Tot bé. Preguntes sobre res d'això? Sí. Què passa si vostè li va donar un nombre negatiu? Anem a veure què passa. Així que en aquest número especial cas-- de persones a l'habitació, un de negatiu. Va rebutjar que, perquè fins aquí ens ha tocat estar manejant el fet que si n és menys de la que anem a tornar a preguntar. Si voleu declarar una matriu de mida negatiu, en general no funciona. Així que anem a tractar. Anem a ignorar el que sigui valor que l'entrada per n i dir les edats int negatiu. Anem a veure si és que compila. No estic segur. No. Així les edats es declara com un matriu amb una mida negatiu. Així avançat que reconeix un conjunt no pot ser de mida negatiu i el rebutja. Ara, si no fem servir aquest bucle do-while correctament, si no marxàvem si n és menor que 1-- diguem que simplement no tenia en absolut i en el seu lloc ens agafem un enter. No importa el que sencer és, declarem un arranjament d'aquesta mida. Així que el compilador no pot possiblement queixar ara. Si compilar esto-- per la qual cosa no es pot queixar, perquè no pot saber que sóc va introduir un nombre negatiu, que podria ser vàlid. Per tot el que sap, jo podria introdueixi un nombre positiu, que és perfectament vàlid. Així que m'imagino que si entro negatiu 1 persones a la sala, la segmentació de culpa. Tan bé. Així que anem a afegir aquesta enrere just mantenir el que era originalment. Així que les edats. Ara si vull provar un negatiu age-- així que anem a diuen que hi ha cinc persones a l'habitació. Edat de la persona número u és negatiu 4, persona de tres és zero, persona tres-- acord. Així que aquí, a partir d'ara, el nombre de persones a l'any un serà negatiu 3 anys d'edat. Així que probablement no té sentit. Però això és només perquè mirant en el codi de tot el que estem fent està sol·licitant getInt. Ara, si haguéssim tingut la Funció GetPositiveInt o que havíem simplement fet això tipus de mateix bucle mentre allà baix, llavors això funcionaria perfectament bé. Però en aquest particular, cas, nosaltres no fem passar a ser la gestió de valors negatius. Alguna altra pregunta sobre matrius? D'ACORD. Així que ara hem vist matrius. I anem a haver d'utilitzar això per als arguments de línia de comandes. Així que en conjunt de problemes dos-- Sé que molts de vostès encara podria estar treballant en el set problema un, sinó de problemes de dues està pujant. En el problema va fixar dos, vas a hauran de tractar amb cadenes, matrius, i els arguments de línia de comandes. Quins són els arguments de línia de comandes? Ara, es pot veure aquí baix un petit teaser de exactament el que és va a estar passant. Veiem int main, argc inc, suports argv cadena. Així que primer anem a tractar d'interpretar el que està tractant de dir. Ara, a D'acord. Així que en la línia de comandes ha d'estar acostumar-se a alguns d'aquests comandaments ara, i el que has d'executar cd al terminal abans. Així que si diem pset1 cd, vostè sap que això ha de estar canviant en el directori pset1. Ara nota que mai has escrit un programa com això abans. Cada programa que vostè ha escrit, ha d'executar, per exemple, el DOT retallar Mario, punt slash cobdiciós, i després vostè podria demanarà entrada. Ara, això no és el que canvi de directori fa. Quan s'executa cd, no després dir, quin directori vols cd a? En el seu lloc, vostè acaba de dir, pset1 cd, i simplement entra al directori pset1. Així que de manera similar tenim altres exemples. fer hola. Quan s'executa fer, no després dir, quin programa t'agradaria fer? Vostè acaba de dir, en el línia d'ordres fan hola. Move és un altre exemple. Aquest ens estem movent la mario.c presentar fins a un directori. Així que ara sabem amb aquest exemple realment estem passant dos arguments. Hi ha mario.c com a primer argument, i punt punt és el segon argument. I després quan s'executa fa, vostè veure que realment llarg comando line-- que realment llarg d'ordres imprès a la línia d'ordres. Així que molt command-- aquest és només una petita part de la mateixa, però ara tenim tres arguments de la línia d'ordres. Dot guió zero, hola, i hello.c. Així que aquests són de línia d'ordres Les discussions, arguments que està passant en el línia d'ordres perquè no ha de ser impulsat quan s'executa el programa. Seria frustrant si quan Va executar so metàl·lic que va dir: "Està bé, que program-- que arxiu estàs compilant? Hello.c. El banderes oi agradaria entrar? o guió. Què t'agradaria l'arxiu que es diu? hola. No, només executa Clang dash o hola hello.c. Així que mirant cap enrere en això. Ara argc argc-- és el recompte d'arguments. És el número de la línia d'ordres arguments introduïts en la línia d'ordres. Bé, tècnicament argv-- la v significa vector, que bàsicament significa matriu. Però es pot ignorar això. Argv-- tenim argv corda, així suports argv cadena. Així que aquesta és una altra forma de claudàtors que ho has vist abans. Suport de manera que hem vist notació quan hem dit, com, cadena s és igual Zamyla. s 0 suport accedeix a la Z. caràcter També hem vist claudàtors quan vam dir int edats acorchetan maig. Això va declarar una matriu de mida 5. Així que aquí és una versió de la suports que no han vist abans. Així que aquest tipus de argv cadena que seria completament familiaritzat que no seria més que una cadena. Ara els parèntesis indiquen que es tracta d'una matriu. Així suports argv cadena de mitjans que argv és una matriu de cadenes. Ara tècnicament una cadena és una sèrie de caràcters. Així que això és ara una matriu d'un conjunt de caràcters. Però és molt més fàcil que pensar això com una matriu de cadenes. Llavors per què podrien els suports estar buit? Igual que, per què no podem dir, suport de 5, suport n? Sí. Sí. No sabem quants entrades allà seran. Així que si ens fixem en l'exemple so metàl·lic, diem Clang tauler o hola hello.c. En aquest cas particular, no succeeixi haver tres arguments de la línia d'ordres. I així el brackets-- ja veurem en un segon no seria 03:00. Tècnicament seria 04:00. Però els suports, ho faríem per exemple, hi ha tres. Però ara, si ens fixem en moviment mario.c punt punt, els suports ens agradaria posar dos en ells. I hi ha un munt d'ordres que tenir un nombre variable de línia d'ordres arguments. Així que el que aquesta versió de la notació de claudàtors indica és que argv és una matriu de cadenes. Però no sabem quants cordes estan en aquesta matriu. I com llavors sabem com moltes cadenes estan en la matriu? Aquest és tot el argc punt. argc ens diu quant temps argv és. Així que l'última cosa a tenir en compte és que, tècnicament, la comanda en si compte com una dels arguments de la línia d'ordres. Així pset1 cd, hi ha dos arguments de la línia d'ordres. El programa en si mateix, cd, i després la part argument real de la mateixa, pset1. Qualsevol programa que vostè ha escrit fins al moment ha tingut punts d'una línia d'ordres argument-- slash Mario. Aquest és l'únic argument de línia d'ordres. Així que ara mirant Clang dash o hola hello.c. Llavors, què és argc? 4. Així argc es 4. Clang, suport de manera argv 0 és so metàl·lic. argv suport 1 es ruixada 0. argv suport 2 és hola i argv suport 3 és hello.c. Ok, així que les preguntes sobre aquest tema, i després anem a mirar alguns exemples programàtics. D'ACORD. Així que anem a fer una ullada a hello3.c. Així que això ha de ser familiar de un dels primers exemples c teníem on ens acaba de dir hola món, però ara això és més general. Així que aquí estem dient hola % S barra invertida n argv suport gener. Notice-- tan amunt fins a aquest punt, és a dir el que el meu fitxer de plantilla ha semblat. Vaig tenir int main (void), i després ho faria fer alguna cosa a la funció principal. Ara en canvi, un cop que vam començar a tractar amb arguments de línia de comandes, hem de declarar 01:00 diferent forma de principal. Així que mirant hello3 de nou, la principal va prendre dos arguments ara-- int argc, el nombre d'arguments de línia de comandes, i la cadena argv parèntesi, el real cordes van entrar a la línia d'ordres. Així que vaig a canviar això plantilla per a reflectir aquest fet. Ara cada vegada que escrius un programa, si no ho fa han de realitzar cap de línia d'ordres arguments, a continuació, només ha d'utilitzar int main (void). Però ara, quan vostè està escrivint programes d'arguments de línia de comandes, que vostè va a estar fent per al problema establir dos-- així que ara que vostè està funcionant programes que necessiten per prendre arguments de la línia d'ordres, cal tenir principal d'aquest formulari. Així aquí-- aquest és el gran ús l'argument de línia d'ordres. Així impressió argv 1. Acceptar així que anem a compilar i executar aquest programa. Fer hello3. Compila. Dot slash hello3. I diguem, "Rob". Hola Rob. Si dic: "Hola Maria," hola Maria. Hola Maria. Hannah encara diu, "hola Maria, "perquè no sóc fer alguna cosa amb la nostra argv 2. Argv 2 ara seria "Hannah". Argc seria març. ¿I si ho vaig fer? Així hola nul. Li va tocar breument en el fet que, tècnicament, GetString podria tornar null, però anem a obtenir una molt més en el nul en realitat és. Però prendre-ho com una qüestió de fet que no és en general dolent. Vam fer alguna cosa malament si s'imprimeix "hola nul." I la raó per la qual ho va fer alguna cosa malament és-- així, quan em vaig trobar hello3 slash dot, argc era 1. Així que això significa que la longitud d'argv era 1. Si una matriu és de longitud 1, l'únic índex vàlid és zero. I aquí argv 1 està fora el rang d'aquesta matriu. Era similar a l'anterior, quan vaig tractar per emmagatzemar 6 fora de la final de la matriu. Així que estic intentant accedir a alguna cosa fora dels comtes argv, i estem rebent nul. Així que una millor versió de això, una millora, està comprovant explícitament argc. Així que si argc és igual a 2, el que vol dir que ens trobem una mena hello3 slash dot Rob. I va imprimir "hola Rob." Si argc no és igual a 2, llavors només va fer cas omís del que poses en l'argument de línia d'ordres com a arguments de línia de comandes. O si vostè no va posar cap en absolut, és només va a ignorar això i dir, "hola tu." Així que l'elaboració d'aquest. Fer hello4. I corrent hello4. Execució d'aquesta manera, el que ha de ser imprès? "Hola vostè." Hola vostè. Què passa amb hello4 Rob? "Hola Rob." I, finalment, hola Rob Maria és simplement "hola You" de nou, perquè no realment entrar cosa que esperava. Ha introduït més noms del que podia manejar, de manera que només per defecte en el hola que el comportament. Així que les preguntes sobre això? O arguments de línia de comandaments? OK, així que fer una ullada a un parell més exemples de l'ús de de línia d'ordres arguments-- primer hem argv tauler 1 punt c. Així que els comentaris regalen el aquest programa hauria d'estar fent. Però noti ara-- aquest bucle for, Això coincideix amb el patró exacte Deia abans. Ens toca estar utilitzant argc en lloc de n. Ara argc és realment el núm. És la longitud de la matriu argv. Així es iterar sobre el argv array printf-ing cada valor argv. Així que si faig això. Fer argv 1. Compila. Dot slash argv 1. Només córrer això, impressions del punt de barra argv 1 ja que era l'única línia d'ordres argument-- el nom del programa. Sempre hi haurà almenys: argc no pot ser menor que un, ja que no sempre ho farà, almenys, ser el nom del programa a executar. Així argv 1 Rob imprimirà argv 1 i després en la nova línia "Rob". Així que en la primera iteració d'aquest bucle, i és 0. Argv 0 és el nom del programa. Dot slash argv 1. I després argv 1 és la meva primera argument de línia de comandament, que és Rob. En aquest punt, estem igual a argc. Trenquem fora del circuit i hem acabat. Així que això funcionarà per a una arbitrària nombre d'arguments de la línia d'ordres. Noti que imprimeix argv 0, argv 1, 2 argv, argv 3, 4 argv. I no hi ha argv maig. argc és igual a 5. Així que en argc-- i és igual a 5, trenquem fora del circuit. D'ACORD. Així preguntes sobre que abans mirar un exemple més complex? Així argv 2. Tot bé. Així que encara estem imprimint els arguments de la línia d'ordres. Però ara adonar que tenim 1 niat de bucle. Llavors, què està fent això? Així que el primer bucle està fent exactament el que ho feia abans. Encara estem looping més cada argument de línia d'ordres, però ara aquesta segona loop-- que hem També vist alguna cosa com això abans. Quan va ser iterar sobre Zamyla imprimir Z-A-H-I-L-A. Així que aquest segon bucle per int j és igual 0, n és igual a strlen del suport argv i. Així que anem a pensar per primera ell-- anem a caminar a través. Anem a pensar en el que l'equip faria fer si em vaig trobar amb aquest programa tan sols dot slash argv guió 2. Així que si em vaig trobar amb aquest codi, a continuació, argc serà igual a 1. I la cadena argv-- només hi ha serà un índex en argv, i que va a ser igual a dot slash argv 2-- el nom del programa. OK, així que ara i és igual a 0, i menys de 1, i plus plus per int j és igual a 0, n és igual a strlen de argv suport 0, de manera que en la primera iteració d'aquest bucle. argv Suport 0 és slash dot argv 2. Llavors, quin és la longitud d'aquesta cadena? Bé, dot retallar A-R-G-V guió 2. Així strlen que serà de 8. Així que j és igual a 0, n és igual a 8. Mentre j és menor que 8, j ++. I amb això ens estarem la impressió d'un sol caràcter, el qual és argv suport i suport de j. Així que l'única i és zero. Encara només tenim una argument de línia d'ordres. En aquest primera iteració del bucle for, estem serà la impressió argv suport 0 0 abraçadora. I llavors j es va a incrementar. I anem a la impressió argv suport 0 suport gener. I després argv suport 0 suport febrer. Així que aquest és el nostre primer encontre de matrius multidimensionals. Recorda abans que et vaig dir argv que és tècnicament una matriu de matrius de caràcters. Així que aquí si em va dir alguna cosa així com cadena s és igual a suport argv i, i llavors em vaig dir: s suport de j, això seria el compliment de la mateixa cosa. Ara, vostè ha vist s suport de j abans. Això és només accedir a la j-th caràcter d'aquesta cadena. Així que amb això, estem rebent la caràcter j-èsim del argv-i. Llavors, què es deu aquesta última instància de sortida? Fer argv 2. Compila. Dot slash argv 2. "Rob Maria Hannah" i donar-nos una mica d'espai. Així que veiem que aquesta és la sortida punt en la seva pròpia línia i barra en la seva pròpia línia i en la seva pròpia línia. Està imprimint cada caràcter individual de cada argument de línia d'ordres. I a continuació, entre ells, a causa d'aquesta nova línia estem imprimint aquí baix, en entre ells que va imprimir una nova línia. Així que això és similar a el tauler argv prèvia 1, que cada impresa argument de línia d'ordres, però ara estem imprimint els arguments de la línia d'ordres i després a través de cada iteració caràcter de cada argument de línia d'ordres per obtenir aquest resultat. D'ACORD? Així que les preguntes sobre això? Una cosa a destacar és que arguments-- de línia d'ordres pel que estan separades per espais com que, naturalment, esperar que siguin. Així que una cadena pot tenir espais en el mateix. No és súper important, però si volia que el tercer argument de línia d'ordres Per tenir un espai en ell, llavors jo podria dir alguna cosa com això. D'ACORD? Així que aquesta ara sent només té tres de línia d'ordres, així arguments-- 4. Dot slash argv tauler 2, Rob, Maria, i Hannah Bloomberg. D'ACORD. Preguntes sobre això? No hi ha res especial sobre el caràcter d'espai. És només passa a ser que el de línia d'ordres tracta el caràcter d'espai com la forma de separar cada argument. Tot bé. Llavors conjunt de problemes dos-- que seràs mirant a la criptografia de clau secreta. Per tant, similar a l'exemple vam veure de A Christmas Story, vostè va a ser l'aplicació d'algunes algoritmes que, donat un missatge, podràs per xifrar el missatge que només algú amb aquest secret clau, amb aquest anell descodificador, ha de ser capaç de desxifrar. Així que aquesta és l'edició estàndard. Seràs la implementació dues versions diferents. Si li passa a fer una ullada de manera que el hacker edition-- ara, donarem que una cadena com aquesta, el que representa una contrasenya xifrada. Així que el seu objectiu és esbrinar el que la contrasenya és desxifrada. Ara bé, això és en realitat com contrasenyes s'emmagatzemen en una gran quantitat d'ordinadors, i que només s'emmagatzema aquest cadena aleatòria de caràcters. Has de trobar la manera d'arribar d'aquesta cadena aleatòria de caràcters al que era la contrasenya. I, finalment, després d'això conjunt de problemes, vostè ha de ser capaç d'entendre el que això significa. Així que vostè aprendrà a desxifrar aquest tipus de cadena aleatòria. De la mateixa manera, si vostè recorda de setmana 0, que podria haver vist aquest URL. I vostè hauria de ser capaç de desxifrar això eventualment. Pot ser que no siguis feliç quan vostè desxifrar i feu clic a l'enllaç. Tot bé. Això és tot per avui. Així que ens veiem la setmana que! [REPRODUCCIÓ DE MÚSICA ELECTRÒNICA]