Escolar Documentos
Profissional Documentos
Cultura Documentos
• Para chamar:
Não use gets(). É obsoleta e perigosa
• fgets(), gets() e scanf("%s",&str) são funções de biblioteca para
receber uma string do teclado.
• gets() e scanf() são inseguras porque não têm proteção contra
overflow. Para números, pode usar scanf().
• São usadas por hackers para quebrar sistemas.
• gets() foi excluída da biblioteca oficial. Não use.
• A fgets() garante que não escreve fora do seu vetor.
• fgets() também serve para ler strings de arquivos.
• scanf(%s) é diferente. Ela lê várias strings, separadas por espaços.
Serve para ler palavras, mas não frases.
Imprimindo strings: use %.nns
• Para imprimir strings que você tem certeza absoluta que possuem um
zero terminador, use %s:
printf("%s\n", vetor);
• Se você não pode garantir que a string possui um zero terminador, é
melhor limitar a impressão com %.nns, onde nn é o tamanho máximo
impresso, com 1 ou mais dígitos:
printf("%.80s\n", vetor); // OU,
printf("%.200s\n", vetor);
• Desse modo, você não corre o risco de ver a sua tela cheia de
"sujeira".
Acentos, estilo anos 90
1. Salve seu programa fonte em codificação ANSI. Para converter no
Notepad++ use: Formatar, Converter para ANSI.
2. Inclua o header <locale.h>. Na primeira linha do seu main(), use:
setlocale(LC_ALL, "Portuguese") // Pode ser LC_CTYPE
3. No PowerShell, comande: chcp 1252
• Com esta solução, você pode usar acentos em comentários, strings,
printfs, e entradas do usuário no teclado. 1 letra = 1 byte. Tudo
funciona.
• Nem tudo. Não aceita emojis, nem caracteres em línguas não
ocidentais. É uma solução considerada obsoleta.
• Só funciona no Windows.
Exercício 2
• Faça um programa papagaio.c, que, repetidamente, pergunta uma
string para o usuário e a imprime. Use sget() e proteja sua impressão.
Saia quando o primeiro caractere digitado for '#'. Depois que
funcionar, defina um tamanho pequeno para o vetor e teste se
funciona mesmo para strings maiores que o vetor.
Exercício 3
Poda strings: Faça um programa que pergunte ao usuário um número
inteiro n, uma só vez, e depois, repetidamente, pergunte uma string e
imprima esta string, porém limitada a n caracteres. O programa deve
encerrar quando o usuário digitar uma string vazia (Enter).
Exemplo: "Digite N: " 4
"Digite uma string: " abcdefg
abdc
"Digite uma string: " 12345
1234
"Digite uma string: " paralelepidedo
para
"Digite uma string: " IF
IF
"Digite uma string: "