ANDI Peng: Estamos quase através de todas as Série de Exercícios. Na verdade, nós terminamos a maioria Série de Exercícios dos mais difíceis. Então, nós estamos realmente apenas vai espécie de brisa através do próximo par de semanas. Nós vamos começar a falar sobre a nossa projetos finais, os eventos que acontecerão em nas próximas semanas. E a vida será uma brisa. Então, não muito hoje. Esperemos que vai realmente brisa através da agenda para hoje, e, em seguida, sair daqui com algum tempo de sobra. Além disso, eu quero pedir desculpas para a falta de doces hoje. Eu não sei por quê. Mas na semana que antecedeu Halloween, eu iria esquecer de doces. Então, eu estou realmente apenas um vasto decepção para você agora. Porque eu literalmente me lembro de doces para cada classe, mas o Dia das Bruxas. Mas na próxima semana, eu trarei dobrar a quantidade de doces para compensar isso, tudo para você. Vai ser ótimo. Então, eu tenho um par de anúncios em relação a algumas agendamento. Eu tenho alguns problemas de agendamento. Em seguida, vamos passar para falar sobre o que é chamado chmod. Nós vamos falar sobre rapidamente de TCP / IP HTTP. E então nós estamos indo para codificar nossa próprio site usando HTML e CSS. E então eu vou realmente deixar talvez como 20 minutos para falar sobre pset6. Porque pset6 é realmente um monte de coisas que já vimos antes, mas eu queria para refrescar alguns desses conceitos bem como ensinar um par de novas funções. Legal. Então, em primeiro lugar, bem-vindo de volta do intervalo. Espero que você esteja break foi agradável. Será que você fez para a ruptura? AUDIÊNCIA: Fui para Nova York. ANDI Peng: Você foi para Nova York? Acho que metade da nossa escola foi para Nova York. Está tudo bem. Passei a maior parte da minha pausa sedentário na cama Netflixing. E foi um bom tempo. Mas agora estamos de volta, de volta sessão, de volta ao balanço das coisas. Temos um pset devido esta sexta-feira ao meio-dia. Eu acho que você já pegou o seu questionário, sim? Assim, qualquer pessoa que tem não tiveram seus questionários, por favor, venha e pegue seus quizzes a partir de me no fim da secção. Ou me derrubar no campus. Vou tê-lo comigo em algum lugar. Nosso projeto final pré-proposta também. Portanto, para aqueles de nós que nunca tomaram esta classe antes, a pedra angular da CS50 é muito culminou neste grande projeto que os alunos propõem. E a pré-proposta, apenas uma idéia geral do que se pode querer fazer para a sua projeto, essa idéia é devido segunda-feira, próxima segunda-feira ao meio-dia. Então, basicamente, eu acho que vai David falar mais sobre isso na palestra se ele não tem já. E há uma página sólido em nosso site explicando todos os requisitos do projeto. Mas, essencialmente, escolher qualquer assunto que você tem se interessado em durante todo o tempo aqui no CS, quer se trate de jogos ou desenho ou vídeo ou qualquer coisa. E você pode realmente tipo de agora aplicar algumas das lições que aprendemos aqui em CS50-- oi, welcome-- a praticamente condução um projeto final de sua escolha. Tudo o que é devido segunda-feira é apenas uma breve sinopse via e-mail para mim, uma sentença rápida, como, hey, Andi, Eu estou realmente interessado em projetar um jogo que faz isso para iOS. Legal. Apenas deixe-me seu breve inicial idéias para seus projetos finais. E vamos falar através ou não que é realmente uma boa idéia ou não, se é uma idéia viável ou não. Mas apenas o pré-proposta é devido na próxima segunda-feira. pset6, a nossa linda web-- que está errado. Pset7? pset6? É pset6, certo? pset6, o nosso servidor web, deve- Sexta-feira ao meio-dia com o dia de atraso. Horário de atendimento retomar normalmente de segunda-feira a quinta-feira de 8:00-11:00 esta semana. Eu acho que para Commons os próximos três noites. Legal. Antes tínhamos em material, faz qualquer um tiver quaisquer perguntas, piadas, histórias? O que você fez para quebrar a queda? AUDIÊNCIA: O que eu faço? ANDI Peng: Já é há muito tempo, na verdade. Christabel foi para Nova York. Eu fiquei aqui e Netflixed. AUDIÊNCIA: Ah, sim, eu estava aqui. ANDI Peng: Oh, OK. AUDIÊNCIA: Eu não me lembro o que especificamente. ANDI Peng: Isso é OK. AUDIÊNCIA: Netflixing provavelmente. ANDI Peng: Netflixing. Sim, é uma boa hora. ESTÁ BEM. Tudo certo. Quaisquer perguntas antes saltar para material? Além disso, nós estamos indo para tentar acelerar a seção de hoje, não muito para cobrir. E, esperamos, nós vamos chegar aqui fora um pouco mais cedo. Desculpe por não doces, também. Eu sou uma decepção, especialmente durante o Dia das Bruxas. Tudo certo. Legal. Então, vamos começar a falar sobre um argumento de linha de comando chamada chmod. chmod, tudo isso é apenas um sistema Unix chamada feita a partir da linha de comando para alterar as permissões de arquivo. Assim, por exemplo, nós temos tudo encontrou uma página como este, provavelmente, em algum momento nosso tempo de vida de ser um internet usuário, onde o nosso servidor web tem nos deu o erro de Proibida. Você não tem permissão para acessar, yadda, yadda, yadda, neste servidor. Tudo o que realmente significa é que as permissões que foram ligados a qualquer que seja página que você estava tentando acessar não estavam abertas para você. Então, basicamente, chmod é a maneira em que podemos modificar essas permissões de sistema para dar a todos, o usuário, o grupo, ou o mundo, ou qualquer combinação daqueles acesso a determinados arquivos, diretórios, nada realmente, qualquer tipo de sistema em um sistema operativo. Portanto, se qualquer um dos caras têm computadores, se você sente como seguir junto comigo hoje, totalmente à vontade para basta digitar coisas dentro. Se não, você pode simplesmente sair. Então, eu estou indo para realmente puxar o meu terminal de agora. Assim, o comando para executar chmod, ou pelo menos apenas para listar as permissões da sua diretório de arquivos, é apenas ls-l. Como você pode ver, um grupo de material aparece a maioria dos quais é importante para nós em o lado esquerdo aqui. Vocês ver um monte de rs, ws, 1 /. Sim. Essas são essencialmente apenas todas as permissões de arquivo para explicar o que alguns diretórios e arquivos dentro de seu sistema tem. Então vamos voltar para a ponto de poder aqui. Assim, para além dos nomes dos ficheiros como vocês podem ver à direita, nós estamos olhando para ver, essencialmente, apenas a coluna do lado esquerdo. Assim, além de apenas os nomes dos arquivos, nós pode ver as permissões de arquivos, a sua grupo proprietário, o nome do grupo, a data que o arquivo foi modificada, et cetera. Você pode ver um monte de coisas usando chmod. Assim, a maneira que lemos é que chmod a primeira letra que praticamente ignorar em termos de permissões de leitura. A primeira letra apenas nos diz o que tipo de sistema que está acessando. d, neste caso, é um pasta ou diretório. Então, nós sabemos que atualmente o meu espaço de trabalho seção sete era um diretório. E então você vê três tríades, essencialmente apenas três conjuntos de três personagens. E você pode pensar de cada um como um pouco. Então você só tem três conjuntos de três bits, nove pedaços no total. Você tratá-los em grupos de três. Assim, o primeiro grupo de três é sempre suas permissões de usuário. Seu segundo grupo de três é sempre suas permissões de grupo. E o seu terceiro conjunto de três é sempre como o mundo, as permissões em todos os lugares. Então eu acho que o fácil pergunta a fazer é o que é a diferença entre o usuário eo grupo. A principal diferença entre o usuário eo grupo é que um usuário é apenas você, pessoalmente, acesso a tudo o que é agora. Um grupo pode ser se você tiver múltiplo os usuários em um computador, por exemplo. Todos eles podem ser considerados como um grupo. E então o mundo é apenas o mundo, todo mundo. Assim, podemos ver, mais tarde, como podemos modificar aqueles em permissões diferentes. Então, basicamente, estamos vai ainda centrar na parte do lado esquerdo, onde para o diretório CS50 vemos drwx, onde o r apenas significa que é legível. O w apenas significa que é gravável. E então o x apenas significa que é executável. Você pensaria que tipo de que não faz sentido. Deve ser e. Mas x realmente tipo de funciona um pouco melhor, porque você pode se lembrar melhor. Assim, os três tipos de coisas que você pode fazer, você pode ler um arquivo, você pode ter permissão para gravar uma arquivo, ou você poderia ter permissão para executar um arquivo. E assim, a maneira que nós, na verdade, representam aqueles em bits é os números 4, 2 e 1. Então, qualquer coisa que seja legível é representado pelo número de quatro. Tudo o que é gravável é representado por 2. E qualquer coisa que seja executável como representado por 1. Portanto, nesse sentido, nós também podemos Números de representar esses oi, bem-vindo, de uma maneira diferente. Desculpe. Antes de todos, eu vou pedir desculpas em nome de todos inserindo a classe agora. Eu esqueci de doces hoje. Me desculpe, eu sou um fracasso esta semana de Halloween. Vou trazer o dobro da quantidade de doces da próxima vez para compensar isso. Mas de qualquer maneira, desculpe sobre esse caras, me desculpe. Assim, a maneira que nós podemos realmente entrada em nosso comando o argumento é que pode fazer chmod permissões grupo de barra, onde o grupo é apenas o que quer grupo que estamos tentando mudar. E as permissões estão o que quer que nós queremos adicionar a ele. Assim, por exemplo, a mais adiciona permissões, ea subtração tira permissões. E os tipos de grupo, temos a nossa um para todos, u para os usuários, g para grupos, ou o dos outros. É um pouco abstrato agora. Mas nós vamos passar por cima de alguns exemplos apenas para demonstrar isso bem rápido. Todos bom nesta slide, para que eu possa seguir em frente? Legal. Assim, por exemplo, rwx. Antes de falarmos sobre o que ele representa, primeiro de tudo o que rwx significa? Se você ver que esta certo arquivo tem permissões de rwx, o que isso significa o pessoa pode ser capaz de fazer? AUDIÊNCIA: Ler, escrever e executar. ANDI Peng: Sim, exatamente. Você pode ler escrever e executar. Porque todos os três daqueles caracteres estão presentes. Então, se nós ir em frente e falar sobre isso em termos de bits, o rwx também pode ser representada como 700. Porque, como você pode ver em qualquer tipo de permissão de diretório de arquivos, há três tríades. Neste caso, apenas o primeiro tríade tem nada lá. Portanto, neste caso, o símbolo r representa 4, o w é 2, e X é 1. Se você adicionar os juntos, é 7. E por isso, se você converter -lo para binário, é de 700. Porque 7 é a primeira tríade. 0, não há nada de presente na segunda tríade. E então não há nada presente em a terceira tríade, de modo que é outra 0. Assim, no mesmo sentido, um grupo de tríades pode ser representado apenas em bits, apenas em binário bem. Assim, 700 significa exatamente a mesma coisa como rwx ------ em termos de permissões. Todos clara sobre isso? Legal. E assim chmod 111 daria que as permissões para o arquivo? Dar a vocês um casal segundos para converter este. Lembre-se, o primeiro tríade é para o utilizador. A segunda tríade é para o grupo. E a terceira tríade é para todos. E assim chmod 111 daria qual tipo de permissões e para quem? Pegue um par de segundos para pensar sobre isso e voltar. Sim. AUDIÊNCIA: Para que todos possam executá-lo. ANDI Peng: Sim, exatamente. AUDIÊNCIA: Mas ninguém pode ler ou escrever. ANDI Peng: E ​​sinta-se livre para explicar a todos como você chegou a essa conclusão. AUDIÊNCIA: Bem, para o usuário, o grupo, e no mundo, é tudo um, que é o código para o executável. ANDI Peng: Sim, exatamente. Então 1, neste caso, todos nós sabemos é que é esse o código executável. Porque a leitura é 4. Escrever é 2. E o executável é 1. Assim é todos os três tríades são 1, que significa que, para o mundo, para o utilizador, e para o grupo, eles são todos executável. Todo mundo bem com isso? ESTÁ BEM. E assim a segunda forma que podemos, na verdade, escrever isso também é você poderia apenas fazer chmod uma vantagem x. um significa tudo ou todos. O plus significa dar permissões para. E então o x significa executável. Portanto, há dois comandos são, na verdade idêntica. Então, se você deseja executar isto em seu terminal, você fazer chmod 111, nome de seu diretório ou o arquivo. Ou você pode fazer chmod um plus x, Nome do seu arquivo de diretório. A mesma coisa, apenas uma maneira mais fácil, talvez, para alguns representar ou mudança permissões de arquivo. Cada um OK com chmod antes de seguir em frente? Legal. Então, agora nós estamos indo para a cabeça em um alguns slides de conceitos muito abstratas que eu sou muito bonito vai brisa através. E é totalmente OK, se você não entendo tudo. Mesmo agora, eu ainda não sei realmente entender tudo completamente. Mas é mais de ficar a compreensão de nível superior de como algumas dessas coisas funcionam. Então, nós estamos indo falar rapidamente sobre TCP / IP, que é apenas Control Transmission Protocolo cortar Internet Protocol. Lembre-se de palestra, David, que ele ensinará o exemplo onde ele passar as notas em um envelope até gosto do topo da sala de aula? Assim, no auditório da escola de direito David demonstrou essencialmente como o TCP / IP funciona em no sentido de que tudo o que é é um meio de garantir que os dados foi entregue através de um servidor ou na internet. Assim, no exemplo do envelope e a mensagem, o utilizador no final podia ver que, oh, eu precisava receber quatro pacotes de informação. Mas eu realmente recebeu apenas três. Isso significa que deve estar faltando um. E não foi entregue. E assim, o TCP / IP na Internet, através do seu computador eo servidor, faz exatamente a mesma coisa. Tudo que faz é especificar um quadro em que a perda de dados pacotes pode ser reenviado e recebido. Como na internet quando você está tentando para acessar os arquivos on-line ou enviar arquivos para o seu amigo ou olhar para web navegadores, milhares e milhares de bilhões e bilhões bytes de informações são transferidos por milissegundo. E é muito, muito confuso. E é realmente difícil realmente saber o que já foi enviado eo que não foi enviado. E assim TCP / IP apenas especifica uma estrutura coesa em que seu web browser e servidor pode tipo de comunicar uns com os outros, apenas certifique-se de que os pacotes são tudo aqui e nada é perdido e todos os dados que você solicitou é realmente exibido corretamente. Todos OK em apenas isso muito breve alto nível entender? Legal. Então nós estamos indo para mover para falar sobre HTTP, que é apenas Hypertext Transfer Protocol. HTTP, tudo isso é o que quer que qualquer página ou arquivo é acessado em seu site, o servidor retorna um HTTP código de status em resposta o pedido certificando-se de que qualquer um, oh, esta solicitação foi aprovada. E tudo está exibindo corretamente. Ou, oh, não, 404. Algo deu errado. Oh, eu não posso exibir. Tudo o que é que o que quer você está tentando acessar, usar como o usuário está tentando acessar, na internet-- apenas certificando-se que você quer ter sucesso acessada tudo o que foi ou não acessado com êxito que quer que fosse. E assim o status HTTP código apenas fornece-lhe um meio de ser capaz de se saber ou não foi bem sucedida ou não. Assim, por exemplo, uma solicitação de exemplo. Você pode ver aqui é geralmente tipicamente quatro linhas. Temos um HTTP GET 1.1, que é apenas o URL pedido método, o protocolo versão, o nome do campo, e o valor do campo. Então não há necessidade de completamente memorizar nada aqui. Apenas um tipo de conhecimento -se com a forma como estas olhar. Neste exemplo, o método de pedido URL é apenas o que quer pedido você está enviando o servidor. Como, hey, servidor, eu realmente quero acesso yadda, yadda, yadda, página HTTP. A versão do protocolo é apenas o que quer Versão seu host ou seu servidor está usando para acessar informações. O nome do campo é o site ou o URL que você está tentando acessar, Neste caso, www.apple.com. E o valor do campo é apenas tipicamente nome, valor. E isso pode ser qualquer tipo de combinação de letras ou números ou o que quer. Assim, um pedido típico, então o que seu computador realmente envia para o servidor que diz, hey, você sabe o que eu preciso esta exibido, esse é o tipo de pedido que eles realmente receber. Uma resposta exemplo do que o servidor iria enviar de volta para você seria praticamente a mesma coisa, exceto com um código de status no topo. Assim, 200, 0 2 0 é sempre o código de status OK. Como, OK, essa solicitação foi aprovada. Você foi capaz de acessar tudo corretamente. A vida é boa. A vida é bela. Tudo é totalmente bom. E assim, este apenas diz seu navegador e seu servidor, hey, está tudo bem. Eu tenho todas as informações que eu preciso. Legal. Mas o problema é às vezes os problemas surgem quando você have-- durar Eu acho Eu falei sobre duplicatas. Você tem menos boas respostas. Assim, por exemplo, 404 é o Page Not Found. Você às vezes tem um acesso proibido. Você tem vários outros códigos de status que eu estou a certeza de que todos vimos quando você está tentando fazer pesquisas na internet. E seu navegador lhe dá o, não, não pode acessar. E você é como, bem, porcaria. Então, só muito bonito, há alguns códigos de status bastante comum. Talvez se familiarizar com as quais são. O mais engraçado que um Eu acho que eu já ouvi de-- se acontecer de você olhar para cima de todos eles on-line, por alguma razão há na verdade, um verdadeiro código de status chamado 418 eu sou um bule de chá. Eu pesquisei onde o origem desta era. E, aparentemente, um April Fools ' Dia um par de décadas atrás, alguém pensou que seria divertido para criar um novo código de status chamado 418 Eu sou um bule de chá. Legitimamente, o nome deste código é chamado eu sou um bule de chá. Eu esqueço o que página você tem que ir para realmente fazer esta exposição. Mas, aparentemente, você pode, na verdade, obter um código de status que eu sou um bule de alguma forma através fazendo alguma coisa. Portanto, há centenas e centenas de códigos de status. Alguns deles fazem mais sentido do que outros. Mas praticamente apenas conhecimento -se com as mais comuns. O corpo da entidade é solicitada curto e stout, aparentemente. Então, às vezes, há mais erros assustador do que eu sou um bule de chá. Mas este é um que eu acho você tipo de esperança de acertar. Mas eu não acho que você vai. Todos bom sobre o estado apenas códigos, solicitações, processos, tomada de certeza informação é entregue corretamente? Então agora vamos transição em de uma parte divertida da sessão de hoje, onde falamos um pouco sobre HTML. HTML, tudo o que é HyperText Linguagem de marcação. É apenas a linguagem padrão você usa para criar todos os web páginas na internet. Assim, qualquer página da Web, o que é sua página web favorita? Qual é a sua página web favorita? AUDIÊNCIA: [inaudível]. ANDI Peng: Desculpe? AUDIÊNCIA: Tumblr. ANDI Peng: Tumblr. Então Tumblr está escrito em HTML. E assim nós vamos realmente passar e brincar com algumas dessas coisas mais tarde. Praticamente tudo o que você precisa aprender, conhecer, escrever em HTML que você pode provavelmente apenas o Google na internet. HTML, não é um programa como o C onde você pode criar variáveis ​​e fazer coisas legais com ele. É mais do que apenas, oh, é assim que eu quer que as coisas aparecem no meu site. E eu só vou colocá-lo. E vai para denominá-lo. Então, HTML, em certo sentido, é como uma formatação ou de modelo de idioma. É muito mais fácil. É muito mais fácil de aprender, muito mais fácil de escrever em de sua programação normal língua, muito fácil, muito fácil acessível e amigável. Então, nós estamos indo realmente para jogar ao redor, escrever nossas próprias páginas hoje. Mas antes de começarmos, eu só quero passar por cima de algumas breves melhores práticas. Como o HTML é tal um fácil linguagem e porque mesmo se você fizer algumas coisas erradas, às vezes pode não notar, nós queremos ter certeza de que estamos na verdade, aderindo às melhores práticas para certificar-se de que as coisas que poderia estar acontecendo ao redor, mas nem sempre está indo para não ir para a direita certifique-se de que eles estão minimizados. Então, basicamente, certifique- seus fechando todas as tags quando você está escrevendo em HTML. Se você estiver abrindo um corpo, certifique-se que você é fechá-lo com um corpo em algum lugar. Você quer ter certeza de que o seu página web valida usando o que é chamado o W3 Validador. Você pode apenas Google que on-line, e há um link para ele. E então você quer HTML separado, que é a sua linguagem de marcação a partir do seu estilo, que é a linguagem CSS que David demonstrou que também somos vai jogar um pouco com palestra. Legal. Então, quando você quer executar HTML no aparelho CS50, nós estamos indo para executar um programa chamado apache, que tudo é apenas um construído em servidor web que todos na CS50 tem acesso. Nós chamamos isso de apache50 só porque nós gosto de chamar tudo 50 em CS50. Assim, a maneira que você iniciar o CS50 web servidor está digitando em seu comando linha apache50 iniciar ponto. E se você quer terminá-la a qualquer tempo, você apache50 acabar com nenhum ponto. E você apenas pressione Enter. E deve ser a posição até aqui em breve. Aham. Então, eu estou indo só para ir rapidamente sobre um exemplo de uma página da web realmente breve. E nós estamos indo para gastar como 10, 15 minutos jogando em torno de escrever nossas próprias páginas web. ESTÁ BEM. Então, aqui no IDE-- todos podem ver isso? Na verdade, não. Aqui, eu vou aumentar o zoom. Eu só tenho este breve template aqui com nada realmente nele. Nós apenas estamos indo para escrever rapidamente um programa de HTML na qual acabamos dizer Olá para o mundo. Então, mesmo que em C, agora estamos só vai fazê-lo em HTML. Alguém quer realmente apenas tentar dar-me a primeira coisa que você teria que colocar em um documento HTML? Sim. AUDIÊNCIA: Os colchetes, o [inaudível]. ANDI Peng: Yep. Então, algo que é muito original para HTML que nós tipicamente tradicional não encontrar em outro comando linguagens de programação de nível de linha é que nós realmente para especificar o tipo de arquivo que este vai ser na parte superior do nosso código. Portanto, neste instance-- eu acho esse é o comando certo, certo? Aham. No topo, você apenas deseja incluir estrondo html DOCTYPE entre parênteses apenas para dizer a seu computador, hey, olhar para fora. E documento HTML está chegando. E então como é que nós queremos para começar nosso arquivo? Se nós só queremos dizer Olá, tenho um A página web que diz Olá para o mundo, como é que vamos construir isso? Na verdade, vamos voltar para o Google. E nós podemos realmente fazer isso. Aham. Aí vamos nós. Então HTML. Como você pode ver, meu navegador é, na verdade, denominar automaticamente isso para mim. Mesma coisa que em C, quando você criar uma chaveta aberta, o navegador automaticamente acrescenta em um fim chaveta. Felizmente, nosso IDE adora fazer isso por nós também. Então agora podemos tipo de tipo o início de uma marcação, e ele vai dizer-nos sempre para lembrar de digitar o fim da etiqueta. Eu acho que isso precisa ser capitalizado. E então nós queremos adicionar, sempre, uma cabeça em que é o título. Nós apenas queremos chamar talvez este Olá, e então o corpo. E lá vai você. Isso é realmente o nosso documento HTML. Assim, a maneira que qualquer documento HTML é sempre denominado em-- mesma coisa com void main int. Você sempre quer ter HTML de uma tag de abertura e fechamento na parte superior e inferior do seu código. Você quer ter uma cabeça dentro de que contém o título, qualquer que seja apenas vai exibir a guia do seu web principal, e, em seguida, um corpo dentro do qual vai realmente mostrar o conteúdo de tudo o que você quer fazer. Então, se você quisesse realmente executado isso, eu estou indo para zoom out. Você pode realmente começar apache50 iniciar ponto. Legal. E assim como você pode ver, agora esta ligação tem aparecido. Ele diz que seu site é agora disponível em algum link abaixo. Então, toda a nossa IDE tem done-- não IDE, sorry-- sim, nossa IDE tem feito é criar uma web ligação sobre a qual todas as nossas páginas web pode ser acessado no servidor. Então, vamos dar uma olhada aqui. Vamos clicar sobre isso, vá para hello.html. E você vê uma forma muito simples A página web para Olá mundo. ESTÁ BEM. Na verdade, estamos indo apenas tem everyone-- sim, qual é? AUDIÊNCIA: Eu tenho uma pergunta básica. ANDI Peng: Yup. AUDIÊNCIA: Como você salvar seu arquivo como um HTML? ANDI Peng: Sim. Então, se eu fosse para criar um novo arquivo, se eu fizer Novo arquivo, Untittle, se eu fizer, section.html, crescimento, isso é tudo o que tenho que fazer. AUDIÊNCIA: [inaudível]? ANDI Peng: Não. AUDIÊNCIA: [inaudível]. ANDI Peng: Não. AUDIÊNCIA: [inaudível]. ANDI Peng: Sim. Praticamente, a extensão da o arquivo que está dentro de seu IDE, que informa ao computador, que diz ao navegador, hey, olhar para fora. Este vai ser um código escrito nesta linguagem. Assim, por exemplo, no Microsoft Word, o que faz todos os documentos do Word acabar com o que extensão? .doc ou .docx, certo? Tudo o que faz é especifica para seu sistema operacional, hey, você tem um documento do Word chegando. Abra-o com o Word. A mesma coisa com PDFs. Ele sabe, oh, eu preciso para abrir esse arquivo com o Adobe Reader ou Adobe Acrobat. E assim extensões operar o mesma forma que em seu computador. Se você especificar sua página de código a ser nomeado HTML, então ele sabe, oh, você tem código HTML. Vou tratá-lo como código html. Portanto, é super inteligente nesse sentido. Então, todo mundo, vamos tomar como 10 minutos e apenas criar nossos próprios websites. Vamos adicionar nas coisas encantadoras. Sinta-se livre para dizer o que quiser. Eu só quero ter certeza de que servidores de todos estão funcionando corretamente antes de liberá-lo para o pset. Porque se seus servidores não correr para o pset, que será muito, muito ruim. Eu estou indo só para flutuar e ver o que todo mundo está trabalhando. Como está indo? AUDIÊNCIA: Eu só liguei o computador. ANDI Peng: Isso é OK. AUDIÊNCIA: [inaudível]. ANDI Peng: Apenas o seu IDE. Sim. AUDIÊNCIA: [inaudível]. ANDI Peng: É OK. AUDIÊNCIA: [inaudível]. ANDI Peng: Totalmente bem. Está todo mundo acessando OK seu servidor web? É apache50 correndo OK? Eu acho que em alguns dos as outras seções, teve problemas com as pessoas não ser capaz de acessar o servidor. Sim. Então você só executar apache50 espaço iniciar período espaço. AUDIÊNCIA: [inaudível]. ANDI Peng: Yup. Boa? AUDIÊNCIA: [inaudível]. ANDI Peng: Oh, OK. Então você deveria ter um espaço. Então apache50-- AUDIÊNCIA: eu fiz. ANDI Peng: espaço --start. AUDIÊNCIA: Oh, espaço dot. ANDI Peng: Yup, espaço dot. Ai está. Assim, pois, se você tiver uma página HTML criado, então você pode apenas ir diretamente para o link que ele especifica. E você deve ser capaz de acessá-lo. Todo mundo foi capaz de acessar suas páginas da web OK? AUDIÊNCIA: [inaudível]. ANDI Peng: Ah, isso é OK. AUDIÊNCIA: [inaudível]. ANDI Peng: Sim. Eu acho que você pode realmente abrir -lo dentro de seu browser, navegador e não apenas o seu navegador IDE. Sim, eu acho que se você copiar e colá-lo. AUDIÊNCIA: E, em seguida, como podemos desligá-lo? [INAUDÍVEL] ANDI Peng: Sim, você faz apache50 parar com nenhum período. Aham. AUDIÊNCIA: [inaudível]. ANDI Peng: Com nenhum período. Sim. Aí vamos nós. Aham. Estamos criando nossas próprias páginas web. AUDIÊNCIA: Ah, legal. ANDI Peng: Sim. AUDIÊNCIA: Eu tenho uma pergunta. Então apache 50-- ANDI Peng: 50, sim. AUDIÊNCIA: [inaudível]. ANDI Peng: O quê? Isso é estranho. Veja, que era uma espécie de questão que estava acontecendo antes. ESTÁ BEM. Me ver depois seção. Porque nós estamos tendo alguns problemas com o servidor. E você quiser fazer Certifique-se de que o servidor é execução antes de iniciar o pset. Porque você vai precisar dele. Sim. Existe mais alguém que não tenha sido capazes de obter seu servidor para iniciar? Para aqueles de vocês que querem adicionar estilo adicional para suas páginas web, nós podemos realmente fazer o que David fez na conferência, bem como, que é criar um estilo adicional folha, que é um ponto CSS, em cascata Style Sheet e, na verdade, apenas adicione-in. Assim, por exemplo, eu criei apenas praticamente quase a mesma exata David fez na palestra. Você pode muito bem apenas fazer corpo. Você tem o que são chamados de tags no qual você pode aplicar para IDE seja qual for secção você quer dentro de seu real para página HTML. Assim, o corpo da página, você pode fazer centro align texto. E então eu vou criativo uma tag chamado superior interna dos quais eu quero essas coisas para acontecer, atribuir um tamanho maior de pixels para a fonte. Eu quero que a espessura para ser ousado. E eu quero a cor para ser azul, assim arbitrária valores que eu decidi escolher. Eu posso criar uma outra tag chamado meio. Tamanho da fonte, torná-lo um pouco menor. E então eu posso criar outra tag chamado fundo onde eu quero o tamanho da fonte para ser ainda menor ainda. E assim praticamente este é apenas exemplo de folhas de estilo de código fonte ou origem que é muito fácil simplesmente Google. Se você diz, oh, eu quero a minha fonte para estar em itálico e verde escuro, você pode provavelmente Google, e, em seguida, ele vai dizer as tags ou identificações apropriadas para criar. E assim a maneira que você realmente tipo de ter isso em um documento HTML ou usá-lo é tudo que você tem a fazer aqui é na cabeça adicionar um link para a folha de estilo. Então você pode simplesmente ligar iguais href seja qual for o nome de sua folha de estilo é. E, em seguida, a relação é uma folha de estilo. Então, dentro de qualquer documento HTML, contanto que você incluir esta folha CSS ponto, você deve ser capaz de acessar e ter as propriedades lá. Assim, por exemplo, aqui eu tenho apenas criar outra página web exemplo. Este é bem-vindo à seção CS50 Terças-feiras de 2:00 para 3:30 comigo. E então eu adicionei uma imagem bonita que que potencialmente deve ser capaz de ver. Então, se você der uma olhada aqui, se você vai para style.html, criamos uma página web com gatinhos. Porque gatinho são impressionantes. Assim, adicionando uma imagem é apenas img ligação SRC. Praticamente, se há qualquer tipo de recurso que você deseja adicionar ao seu website-- então vamos dizer, você quer adicionar um menu ou uma barra de pesquisa ou como um image-- apenas o Google como fazer isso. E você só plop nesse formato. E você pode apenas bonita tanto basta adicioná-lo dentro. É muito, muito fácil. Nós estamos criando nosso próprio páginas da web agora. Se você quiser-- AUDIÊNCIA: [inaudível] ANDI Peng: Desculpe? AUDIÊNCIA: [inaudível]. ANDI Peng: Oh, o div é apenas uma divisão dizendo-me que, oh, eu tenho uma determinada seção chamada meio em que eu estou aplicando minha tag CSS e, em seguida minha outra divisão com o fundo. Isso é tudo que está dizendo a você. Porque é bom para manter limpo coisas em ordem, para que o programa sabe exatamente para ser executado. E acho que posso copiar e colar este em meu navegador real também. Ele deve estar bem. Sim. Uhul. Então, se todo mundo quer apenas tente criar uma página web, nós vamos tomar outro dois a três minutos. Eu só quero ter certeza servidores de todos estão em execução e todo mundo tem uma idéia de como fazer isso. Se vocês querem tirar seus computadores. Ainda não funciona? AUDIÊNCIA: Eu sou apenas [inaudível]. ANDI Peng: Talvez tente atualizar 50 também. Sim. AUDIÊNCIA: [inaudível]. ANDI Peng: Sim. Assim, a maneira que você iniciar um novo servidor web na IDE é apenas fazer apache50 início espaço espaço dot. Eu só queria ter certeza servidores de todos estão funcionando OK. AUDIÊNCIA: Aqui, no terminal? ANDI Peng: Sim. AUDIÊNCIA: [inaudível]. ANDI Peng: Apache. Na verdade, eu acho que você é executando alguma coisa já. Sim, você está, na verdade, executando um servidor diferente. Sim, você é bom. Enquanto que está trabalhando, você está OK. AUDIÊNCIA: OK. ANDI Peng: Há dois maneiras de executar servidores. Assim, desde que uma das formas está funcionando, está tudo certo. Vamos tomar mais um minuto apenas a espécie de terminar os últimos retoques de qualquer página web que vocês queriam fazer. Está todo mundo trabalhando pelo caminho? Servidores de todos são correndo para além de seu? Nós vamos descobrir isso. E HTML de bastante simples. Então eu acho que estamos todos bem. Sim. Eu voltarei. AUDIÊNCIA: [inaudível]. ANDI Peng: OK. AUDIÊNCIA: Então é só começou a carregar. ANDI Peng: Não se preocupe. Então, HTML, não há código fonte que será on-line após a secção. Além disso, David tem um conjunto bando online também. Apenas um tipo de olhar sobre ele para ver como páginas HTML são escritos. É bastante fácil. Qualquer coisa que você não sabe, você é bonita muito apenas Google e você é bom. Eu só quero ter certeza de que seus servidores estão em execução. AUDIÊNCIA: Será que fazer isso muitas vezes? ANDI Peng: Isso nunca aconteceu comigo. Eu não sabia que poderia até mesmo hibernação. AUDIÊNCIA: [inaudível]. ANDI Peng: Eu acho que everyone-- mine nunca hibernado antes. E eu não sei por que. É estranho. AUDIÊNCIA: [inaudível]. ANDI Peng: é seu hibernando? AUDIÊNCIA: [inaudível]. ANDI Peng: Sim. AUDIÊNCIA: É OK. Portanto, uma vez que é aberto. ANDI Peng: OK. Nós vamos lidar com algum servidor questões após secção. Você deve estar bem. Embora, você quer ter certeza de que você obtê-los resolvidos antes de sair. Porque se do seu servidor não correr, então você está não vai ser capaz de fazer o pset, como qualquer parte do pset. Então você quer ter a certeza que que está trabalhando. Legal. Tudo certo. Diga adeus gatinhos. Passei muito tempo procurando que a imagem Gatinho de colocar. Então, de qualquer maneira. AUDIÊNCIA: [inaudível]. ANDI Peng: Desculpe? AUDIÊNCIA: [inaudível]. ANDI Peng: Eu acho que é no site. Como a especificação? AUDIÊNCIA: [inaudível]. Eu acho que a especificação é apenas line em sete semanas. Eu acho que é chamado pset6, mesmo embora nós estamos em semana de sete, que é um bit. AUDIÊNCIA: Mas eu quero dizer, se você quero olhar at-- se quer puxar para cima a nossa versão do o web site da nossa sever? Assim como server.c é o pset, certo? Se você quiser olhar para isto, como a forma como ele verifica para fora? ANDI Peng: Ah, então, na verdade, o pset, tudo o que estamos fazendo aqui é implementing-- aqui, Eu vou passar por cima deste brevemente. Assim, para todos que está acabado a seção, vocês estão com sorte. Há muito pouco material para cobrir efectivamente hoje. Eu só vou passar a próxima 20 minutos passando por cima pset ajuda. Porque há alguns útil funções que ajudarão a sua vida. E, esperamos, vamos estar fora daqui em como 20 minutos. ESTÁ BEM. Então pset7 está errado. Mesmo que nós estamos em semana sete, é realmente pset6. Eu vou mudar isso. Tudo o que estamos fazendo em pset6 é a criação de um servidor web. Isso soa super-assustador. E, especialmente, para aqueles de vocês que já tem olhou para o código de distribuição, há um monte de código, um monte de código. Mas é totalmente OK. Porque o âmago da questão parte da verdade, criando o servidor é feito por nós. Tudo o que você está realmente pediu a fazer nesta pset é só para fazer alguma manipulação de cadeia em arquivo I / O. É, na verdade, como bastante simples. Então, quando você primeiro baixar isso-- que aqui tem realmente já baixados o pset e deu uma olhada? Tudo certo. Sim. Não há como 500 linhas de código que você vai ser como, o que está acontecendo? E isso é totalmente bom. Certifique-se de assistir os walk-throughs. Porque David e-- Eu não sei. Eu não acho que é Zamyla, este um. Mas eu acho que algum outro walk-throughs são bastante útil em termos de apenas deixando você sabe o que está acontecendo dentro de seu código. E é totalmente OK. Porque as quatro funções que você é pediu para implementar têm realmente zero a ver com o servidor real. Todos eles têm de fazer é apenas analisar diferentes cordas, pesquisar através de cordas, para garantir que as coisas estão a fazer o que é suposto fazer. Assim, para esse efeito, existem algumas funções muito, muito úteis, especialmente para cadeia manipulação, que todos nós deveríamos passar por cima que eu pensei que seria ser muito útil para vocês para aprender antes de tentar o pset. E eles estão todos contidos dentro de sua biblioteca string.h. Há provavelmente mais útil funções de eu não ter incluído aqui, porque eu nunca quer usá-los ou talvez eu simplesmente não sabem que eles existem. Sinta-se livre para olhar através student.h. Porque lá vai ser um monte de funções que são muito úteis. Então, os seis que eu mais uso no meu pset quando eu estava fazendo isso na semana passada foram strtok, strchr, strrcher, strstr, strcasecmp, e strcpy. E assim os dois últimos podem parecer muito familiar para a maioria de vocês. Caso Str comparar, tudo que faz é comparar cordas para verificá-los para a igualdade, inclusive o caso. E strcpy apenas cópias uma seqüência de caracteres em um buffer. E assim os dois devem parecer muito familiar para vocês neste momento. Porque nós usei-os muito, especialmente para os últimos Série de Exercícios. Mas os quatro primeiros talvez você ainda não viu até agora. Mas eu vou apenas passar por eles. Porque eles estão indo para fazer suas vidas muito, muito fácil não for-- fácil, mas muito mais fácil para este próximo pset. ESTÁ BEM. Então char * strtok, esta é a função definição para esta função contida dentro da cadeia, h biblioteca. Se lhe for dada uma entrada de char * string, que é apenas uma seqüência, ou um char constante * deliminator, delim para breve, tudo o que está a fazer é quebrar o maior string em uma série do que chamamos tokens separados por um determinado valor. Assim, em certo sentido, se eu fosse para dar você section.7.php, esta é uma string. De modo que seria se eu fosse para passar neste como meu str, meu char * str, se o meu deliminator foi ponto, tudo isso gostaria de fazer é a pesquisa através de cordas. E a primeira vez que vê um ponto, seria apenas voltar para o ponteiro para o último token encontrado na seqüência antes disso. Então ele iria bem aqui. E seria apenas dar-me 7.php. E se eu fosse para chamar a funcionar mais uma vez, ele me daria apenas o .php. E assim todo esta função está fazendo é quebrar a seqüência maior em strings menores dependendo sobre o que você está procurando. E assim, por exemplo, em sua função look-up se você quiser olhar para o que determinados caracteres acontecer ou se pontos acontecer ou extensões acontecer, esta função seria bastante útil. Sim. Não se preocupe. Isso tudo vai ser-- sim, qual é? AUDIÊNCIA: Então, na primeira linha, se estivéssemos usando este exemplo, o que nós inserimos em que? ANDI Peng: Sim. Você só iria chamar um strtok delim corda vírgula. E string é igual a section.7.php. E então você está delim pode ser igual a apenas dot. AUDIÊNCIA: OK. ANDI Peng: Sim. Bem desse jeito. Todas estas funções são bastante semelhante quando passamos por eles. Eles apenas fazem as coisas um pouco diferentes. Mas eles estão todos indo para tornar sua vida muito mais fácil. Segunda função, este é como super, super, super importante, é as-- realizar-se. Oops. Pesquisas strchr para o primeiro occurrence-- na verdade, sim. Strchr é a função que Eu definitivamente apenas passou. Portanto, ignore o que eu disse para a primeira função. É realmente chamado strchr. Então, o que aconteceu aqui é se você fosse dada uma seqüência de caracteres em um char c, seria apenas dar você seja lá o que era. Sim. Então, pense nisso como str, que é uma cadeia, e chr como char. Então tudo que você está tentando fazer é procurar para onde um char está dentro de uma string. E assim ele procura o primeiro ocorrência do caractere c na string str. AUDIÊNCIA: [inaudível]. ANDI Peng: Yup. E então se ele não encontrou -lo, ele vai retornar NULL. Então, alguma coisa que vai ser muito útil para vocês em fazer o pset Se, digamos, você estava procurando um extensão como um .docx para um Palavra documento ou .pdf para um documento PDF, você pode tipo de usá-lo para olhar para o que for mais tarde cada vez que você ver um ponto, certo? E assim muito bonito, se você executar que através da função, se ela retorna NULL, então você sabe que ele não encontrá-lo ponto, o que significa que esta claramente não é uma extensão de arquivo válido. Ou se ele retorna algo, então você sabe ele vai voltar independentemente de na verdade, após a prorrogação. Portanto, aqueles de vocês que teve comecei a olhar através de pesquisa e analisar, esta função de Vai ser super útil. Então, nós estamos indo realmente para demonstrar usando este. Por que vocês não tente escrever um função bool sentença char * s que apenas retorna true se s é uma sentença e falso caso contrário. Então dica, você está indo provavelmente para usar strchr. Ou você só procurar no string para um determinado personagem. E assim, em uma frase, o que separa uma frase a partir de um não-sentença, o carácter específico? AUDIÊNCIA: Um espaço. ANDI Peng: Um espaço, certo? E então o que nós, provavelmente, vai quero fazer dentro desta função aqui? AUDIÊNCIA: [inaudível]. ANDI Peng: Nós vamos querer strchr cadeia para a aparência do espaço. Porque se ele retorna algo, então sabemos que esta deve ser uma frase. Isso significa que devemos ter um espaço nessa seqüência. Se não há espaço, então nós sabemos que, hey, acho que não é uma cadeia. Provavelmente é só uma palavra muito longa. Então, eu vou dar a vocês um casal minutos para escrever esta função. Sim. AUDIÊNCIA: Você conseguiu esta cadeia do usuário? ANDI Peng: Sim. Portanto, esta é apenas uma função. Então, imagine dentro de sua função principal você já have-- vamos aqui. ESTÁ BEM. Então eu escrevi este programa onde Eu tenho minha função principal, onde Acabei de criar duas cordas. O primeiro é Hi, my name é Andi-- claramente, uma frase. Meu segundo é apenas Andi, claramente não condenar. E assim eu estou correndo tanto daqueles strings para esta função. Eu quero que vocês escrevem sentença frio. E eu estou armazenando esses valores, e depois é só imprimi-las. Então, pense que o usuário é vai passar uma cadeia. E então você vai, essencialmente, descobrir se é uma frase ou não e retornar verdadeiro ou falso em conformidade. Se vocês querem dar um polegares para cima ou heads-up, acene com a cabeça, é qualquer um está pronto para começar esta, que seria bom. Talvez mais uns 30 segundos? Tudo certo. Vamos ver se você pode tentar escrever esta função. Então pseudo coding-- eu estou indo só para tipo de caminhar por este agora. Praticamente, nós sabemos o função que precisamos usar. Vamos chamar essa função em nossa cadeia e procura por um espaço. Se ela retorna alguma coisa, então devemos sabe que, claramente, esta é uma frase. Porque não há espaços. Então vamos retornar true. Senão, vamos retornar falso. Alguém quer dar me a primeira linha de código que na verdade estamos indo usar para escrever isso? Na verdade, é o mais difícil linha de código também. Sim. AUDIÊNCIA: Se strtok s-- ANDI Peng: Apenas strchr. AUDIÊNCIA: [interpondo VOZES] o espaço não é igual a nulo. ANDI PENG: Cool. Exatamente certo. Todos entendem que a primeira linha? Nós vamos chamar strstr, que é uma função que procura a string s para o caractere de espaço. E se ele encontra-lo, ele vai retornar um ponteiro para onde é. Se não encontrá-lo, ele vai retornar NULL. Então, se ele retorna algo diferente de NULL, em seguida, nós sabemos que encontrou um espaço. Isso faz sentido? Legal. Tudo certo. Então, se nós sabemos que encontrou uma espaço, o que nós queremos fazer? AUDIÊNCIA: Retorna verdadeiro. ANDI Peng: Yup. Return true. E então, alguém quer terminar a função para mim? Sim. Senão, apenas como aquele. E tentar compilar este. Aham. Então, como vocês podem ver a partir do saídas, lembre-se Booleans em C são sempre expressas em binário. 1 é verdadeiro. 0 é falso. Se fôssemos para executar este função na seqüência um, que é Oi, meu nome é Andi-- claramente, um sentence-- o resultado impresso para 1, que é verdadeira. A segunda, que é apenas uma palavra, resultado impresso a 0, o que é falso. Todos clara tipo de sobre como esta função foi escrito? Sim. AUDIÊNCIA: Podemos também fazer, em vez de não é igual não, é igual a igual a 0, de modo que é igual a? ANDI Peng: Não. Porque strchr é uma função. Eu vou voltar a este. Então, qual é o tipo de retorno da nossa função strchr? AUDIÊNCIA: Oh, OK. Ou NULL. ANDI Peng: Sim. É um char * que me diz que o que quer esta função vai retornar, ele vai ser um ponteiro. Ou o ponteiro vai ser apontando para onde ele é encontrado, ou ele vai voltar um ponteiro para NULL. Em qualquer circunstância, ele vai para retornar um ponteiro para alguma coisa. E por isso, se você fosse para equiparar isto equivale, iguais, 0, você está indo para obter um erro de compilação. Porque ele vai retornar um ponteiro. E você está indo para tentar comparar um ponteiro para um inteiro. E o computador não é vai gostar disso. Sim exatamente. Legal. Todo mundo é bom? E em segundo lugar, nós estamos indo para ir mais de uma função chamada strstr. Não se preocupe se esses funções estão confundindo você. Eles estão me confundindo. Como tal, vocês poderiam ter visto, todos eles som praticamente o mesmo. Assim, sempre que você está confuso, puxar para cima a biblioteca string.h. E vocês podem classificar através do qual é qual. Então strstr, tudo o que faz é procuras uma seqüência de caracteres para uma outra corda toda. Então, onde apenas strchr pesquisas para um único caractere, Pesquisas strstr para uma cadeia inteira. Então, eu queria olhar, eu não sabe, Oi, meu nome é Andi. E o nome do meu melhor amigo também é Andi. Se eu quisesse olhar no presente sentença para toda a palavra de Andi, minha agulha seria o que você está procurando. E seu palheiro é o que quer você está procurando-o em. Então, se você está procurando um palavra específica dentro de uma frase, aquela palavra vai ser sua agulha. E, em seguida, a própria sentença vai ser o seu palheiro. E assim ele só procura a primeira ocorrência da agulha cadeia no palheiro string. Ele retorna o ponteiro para a primeira ocorrência. Exceto, lembre-se, neste caso, é o primeira ocorrência de toda a cadeia que você está pesquisando para, não apenas um personagem. E assim, este é quase o mesma coisa que a função acabamos de fazer, apenas com um pouco mais especificidade. Porque você está procurando por mais do que apenas um personagem. E o uso é exatamente o mesmo como a que acabamos de fazer. Todos OK com isso? ESTÁ BEM. Último que nós estamos indo para ir sobre strrchr é, que não é confundida com strstr ou com strchr. strrchr tem um r extra lá. Tenha cuidado quando você está digitando. Você pode encontrar-se inclusive um r extra ou não incluindo um R, e, em seguida, a sua função não tenho de ir trabalhar. E você vai ser confuso. Tenha cuidado para que você está soletrando todas estas funções direita. Então strrchr é exatamente mesma coisa que strchr exceto ele procura não é a primeira ocorrência de um personagem específico, mas sim a última ocorrência. E assim, nesse sentido, é quase exatamente o mesmo. Mas, em vez de se mover transmitir em uma corda, você vai estar se movendo para trás em uma string. Exatamente a mesma coisa, você é apenas pesquisar em uma ordem diferente. E assim que este poderia ser super, super útil para a sua pesquisa função, o primeiro função em seu pset. Vamos fingir que é necessário para escrever um função da extensão de vazio em que passar uma constante caractere nome do arquivo *, apenas uma seqüência, um nome de arquivo, que leva esse nome em e gravuras a extensão do arquivo. Assim, por exemplo, se eu fosse para passar na seqüência de pset7.zip, ele vai imprimir apenas a extensão, que é .zip. E isso iria trabalhar para qualquer tipo de extensão, .docx para o Word ou .pdf para um PDF arquivar ou .html para um arquivo HTML. Muito bonito, escrever uma função que pode fazer isso. Eu estou indo realmente para mudar para o IDE. Não é load-- lá vamos nós. Então tudo que eu tenho feito aqui é criado um char *, a primeira corda, chamado pset7.zip. Eu estou indo para fazer zoom. Eu criei uma segunda corda chamado finalpaper.docx. E escreve-me uma função que, quando chamado vai apenas imprimir as extensões de nome de arquivo. Talvez levar alguns minutos para pensar sobre como você está indo para fazer isso. Um pouco mais desafiador do que o último, mas o uso é quase exatamente o mesmo. Sim. Então escreva uma extensão de função chamada que, se eu lhe der o nome de um arquivo, se eu fosse para lhe dar pset7.zip-- I quero que você imprimir apenas o .zip. Se eu lhe der gosto finalpaper.docx, apenas imprimir o .docx, apenas a extensão de qualquer arquivo. Isso na verdade apenas leva duas linhas de código. Portanto, tente ver se você talvez possa fazê-lo nisso. Na verdade, ele só leva uma linha de código. Mas duas linhas é provavelmente mais padrão. Que função são provavelmente vai querer chamar? AUDIÊNCIA: strrchr. ANDI Peng: strrchr, certo. Porque nós estamos procurando a partir da esquerda para a direita. Eu não dar a vocês um exemplo como este, mas se eu lhe dei um exemplo como www.apple.com e eu só queria o .com, seria um exemplo de onde que deseja chamar a última instância do período e não o primeiro, certo? Se você fosse strchr chamada, ele teria dado-lhe a apple.com. Se você chamado strrchr-lo, teria lhe dado o .com. E por isso tenha cuidado onde ways-- no meu exemplo, você poderia provavelmente poderia ter apenas escrito usando strchr, uma vez que há apenas um ponto. Mas, noutros casos, que pode não ser o caso. E assim sempre tentar projetar seu código bem, assim que-- sim? AUDIÊNCIA: Então, no exemplo, você acabou de dizer, quando você strrchr que seria dar-lhe .com ou apenas vir? ANDI Peng: Seria dar-lhe o .com. AUDIÊNCIA: OK. ANDI Peng: Sim. Ele aponta para onde ele a encontrou. Sim. 30 segundos, talvez? Sim. Todo mundo bom ou talvez um pouco mais de tempo? Show de mãos? Mostra de cabeças? Legal. Qualquer um quer me dar o primeiro linha de código para este programa? AUDIÊNCIA: [inaudível]. ANDI Peng: Então, primeiro de tudo, vamos talvez decompô-lo. Então, qual é o tipo de retorno strrchr? Vamos voltar. strrchr, qual é o tipo de retorno? AUDIÊNCIA: Char * ANDI Peng: É um char *, certo? O que significa que você provavelmente vai querer criar um outro tipo de char * de loja sempre que é retornando para, certo? Porque se você chamar o strrchr função, ele vai dar-lhe um ponteiro para onde quer que ela descobriu que último período, certo? Mas você vai querer armazenar que em algum lugar, certo? E assim como podemos codificar isso em nosso programa? AUDIÊNCIA: Você faz o char * [inaudível]. ANDI Peng: Yep. AUDIÊNCIA: [inaudível]. ANDI Peng: strrchr. Sim. Oh, perdeu uma r lá. AUDIÊNCIA: O nome do arquivo [inaudível]. O que é isso? Oh, é apenas s. ANDI Peng: Oh, é só s. Yup, desculpe. Meu erro. Exemplos não se encontraram. AUDIÊNCIA: E então dot. ANDI Peng: Yup. Tenha cuidado quando você caras é-- aqui, deixe-me fazer zoom. Aí vamos nós. Tenha cuidado quando você caras está digitando, especialmente quando você está fazendo apenas um char. É realmente fácil de acidentalmente apenas fazer aspas duplas em vez de individual. Isso não vai funcionar. Seu compilador vai reclamar. E sua função é só não vai funcionar. E por isso tenha cuidado quando você está fazendo as coisas com caracteres que é aspas simples. E o mesmo acontece com esta linha de código de fazer sentido para todos? Estamos criando um ponteiro char *. Porque strrchr retornos algo do tipo ponteiro. E assim nós vamos chamar strchr em s, que é a seqüência, o arquivo nome, que estamos passando. E nós estamos olhando para o passado instância de um período, que é apenas o apóstrofo dot aspas simples. Sim. AUDIÊNCIA: Quando é que vamos usar aspas duplas e quando é que vamos usar aspas simples? ANDI Peng: Sim. Então citações duplas são sempre usado quando você ter uma seqüência de mais do que apenas um. Então, se você está fazendo strstr, que é o que você procurar uma seqüência de caracteres para string, você iria passá-lo entre aspas. Mas qualquer momento é apenas um caráter único, você quer fazer aspas simples. É uma coisa boa para se manter em mente. Portanto, agora que temos o nosso ponteiro, o que vamos fazer com ele? Eu estou pedindo a vocês para imprimi-los, certo? Então, [inaudível], você quer dá-me a linha de código? AUDIÊNCIA: printf-- ANDI Peng: Sim. AUDIÊNCIA: --você precisa de um lugar titular. ANDI Peng: Yup. AUDIÊNCIA: Imprimir o titular do lugar. Eu não sei o que o lugar é titular, mas apontar para ele. ESTÁ BEM. Vamos pular que, por enquanto, em seguida. AUDIÊNCIA: E então comma-- ANDI Peng: Pointer, certo? AUDIÊNCIA: Pointer, sim. ANDI Peng: Assim tipo de uma pergunta capciosa, tem a ver com ponteiros e cordas que nós meio que já falamos sobre. Que tipo de suporte do lugar nós necessidade de um ponteiro para um char *? AUDIÊNCIA: [inaudível]. ANDI Peng: Sim. É mais fácil do que vocês pensam que é. AUDIÊNCIA: String? ANDI Peng: É apenas uma corda, exatamente. Porque lembre-se cordas não existem realmente. Um char * é o exato mesma coisa que uma string. E isso realmente é o que este s deveria ter sido usado o tempo todo. ESTÁ BEM. Vamos ver se podemos tentar executar este. Vamos fazer uma extensão make. Legal. Vocês ver como eu passei no psset7.zip e o finalpaper.docx, e ele simplesmente imprime o .zip eo .docx? Faz sentido? OK Então eu acho que em seu olhar para cima função em seu pset você é vai ser perguntado se a string tem um determinado fim, você tem que dar um certo código de erro. E assim este será bastante horrível. Porque se você pode descobrir o que é a extensão, você pode então comparar extensão para ver se ele corresponde up com uma certa extensão. E então você pode devolvê- uma mensagem de erro, certo? Sim. AUDIÊNCIA: Então nós não tem que adicionar uma ou qualquer coisa? O ponteiro irá para as-- ANDI Peng: Não. AUDIÊNCIA: --point depois. ANDI Peng: Sim. Ele aponta exatamente para onde a ocorrência foi. Assim, por exemplo aqui, nós somos procura para o período. Então ele vai para voltar um ponteiro para o período. E então ele vai imprimir out começando no período. Então você não precisa adicionar um. Embora, é totalmente bom para, se você não tiver certeza, a apenas um tipo de testá-lo você mesmo. Construir um programa de exemplo. Teste-o você mesmo e ver onde é a impressão. Isso também não é uma má maneira de fazê-lo. Legal. E isso é muito bonito tudo Eu tinha para vocês hoje. Nós fizemos um monte de coisas pset hoje. Assim, quando em dúvida, como Eu disse, sempre olhar para cima a biblioteca string.h para este pset. Não vai ser um monte de em que há função pode ser útil. Alguns podem não ser útil. Eu realmente não sei. Wade através dele, há um monte deles. strstr, strchr, são strrchr super, super útil, bem como os strcpys e strcasecmps que já usei. É apenas muito de andar com cordas, determinar se eles são iguais, recebendo o material fora das cordas, e ser capaz de abrir arquivos corretamente. É um monte de arquivo I / O. pset realmente não é tão ruim. Você vai ter um olhá-lo, baixá-lo, e ver um monte de código. Não se preocupe, o código realmente escrever não é mau de todo. Se alguém tiver problemas com o seu servidor, venha me ver depois de seção. Desculpar mais uma vez por não trazendo doces para o Dia das Bruxas. Eu não sei o que havia de errado comigo. Mas teremos de casal o doce da próxima vez. E boa sorte em sua pset esta semana. Aham.