1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> COLUNA 1: Vamos agora corrigir esse último programa. 3 00:00:01,960 --> 00:00:04,920 E desta vez, vamos alocar explicitamente alguma memória em que o 4 00:00:04,920 --> 00:00:06,550 entrada do usuário será armazenado. 5 00:00:06,550 --> 00:00:09,600 Para isso, vamos aprimorar em que o primeiro linha de código em que declarou s 6 00:00:09,600 --> 00:00:11,590 anteriormente para ser uma estrela de char. 7 00:00:11,590 --> 00:00:14,210 Desta vez, vamos re-declarar lo da seguinte forma - 8 00:00:14,210 --> 00:00:19,380 caractere s suporte de 16, por exemplo, próximo suporte. 9 00:00:19,380 --> 00:00:23,690 >> Em outras palavras, vamos declarar s para não mais ser um endereço de um personagem, 10 00:00:23,690 --> 00:00:26,610 mas sim um conjunto de 16 caracteres. 11 00:00:26,610 --> 00:00:30,295 Desta forma, o usuário pode digitar até 15 caracteres e ainda deixar espaço para 12 00:00:30,295 --> 00:00:31,570 um terminador nulo. 13 00:00:31,570 --> 00:00:35,870 Vamos prosseguir para salvar, compilar e executar este programa. 14 00:00:35,870 --> 00:00:40,770 Fazer barra scanf2 ponto scanf2. 15 00:00:40,770 --> 00:00:45,100 Vamos agora escrever uma string como Olá, e estamos agradeceu o Olá. 16 00:00:45,100 --> 00:00:46,440 >> Agora, ainda há um problema. 17 00:00:46,440 --> 00:00:50,140 Eu só digitei Olá, o que só é cinco personagens, mais 1 para o nulo 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Isso nos deixa com apenas uma necessidade de seis bytes. 20 00:00:53,610 --> 00:00:56,740 >> Mas, infelizmente, nós só alocados 16 no total. 21 00:00:56,740 --> 00:01:01,305 Portanto, se o usuário realmente tipos em 16 caracteres, ou 17, ou várias centenas 22 00:01:01,305 --> 00:01:04,410 caracteres, ainda não vai tem espaço suficiente na memória para o 23 00:01:04,410 --> 00:01:05,400 de entrada do usuário. 24 00:01:05,400 --> 00:01:07,750 E, de fato, isso é o que faz obter a entrada do usuário de modo 25 00:01:07,750 --> 00:01:08,940 dificuldade em geral. 26 00:01:08,940 --> 00:01:12,270 E, de fato, é por isso que nós implementamos a função string get no primeiro 27 00:01:12,270 --> 00:01:13,900 lugar na biblioteca CS50 - 28 00:01:13,900 --> 00:01:16,900 para descobrir como lidar com os situações em que o usuário digita 29 00:01:16,900 --> 00:01:19,710 mais caracteres do que nós inicialmente previsto. 30 00:01:19,710 --> 00:01:21,750 >> Francamente, sem completamente reescrever este programa, 31 00:01:21,750 --> 00:01:23,290 não há solução limpa. 32 00:01:23,290 --> 00:01:26,970 Em vez disso, o que nós temos que fazer é obter um personagem do usuário, um de cada 33 00:01:26,970 --> 00:01:28,860 tempo, uma e outra vez. 34 00:01:28,860 --> 00:01:32,510 E a cada momento, se percebemos que estamos sem memória, teríamos que a 35 00:01:32,510 --> 00:01:36,450 Nesse ponto voltar e realocar um pouco mais de memória, copie o usuário do 36 00:01:36,450 --> 00:01:39,400 entrada anterior do nosso primeiro pedaço de memória para o novo, 37 00:01:39,400 --> 00:01:40,810 maior bloco de memória. 38 00:01:40,810 --> 00:01:44,610 E, em seguida, repetir o processo novamente e novamente até que o usuário é feito fornecendo 39 00:01:44,610 --> 00:01:45,860 sua entrada. 40 00:01:45,860 --> 00:01:48,246