Implemente as seguintes funções retiradas de enunciados de exames.
3.8 Que problema pode provocar a função anterior?
Passo 1
Beleza, na função anterior encontramos um jeito de transformar cada caractere de uma string no próximo caractere ASCII, certo? Então, pensa aqui comigo: o que acontece se já colocarmos o último caractere ASCII na string de entrada?
Bom, o último caractere da tabela ASCII estendida é o caractere non-breaking space (NBSP), que se parece com um “ “ espaço comum, mas funciona de maneira bem diferente. Basicamente, esse caractere “obriga” as palavras separadas por ele a ficarem na mesma linha, impedindo a formatação automática. Mas isso não vem ao caso, o que importa é que, o NBSP corresponde ao ASCII 255, o qual é o último valor que cabe em um byte.
Assim, quando utilizamos nossa função que incrementa cada caractere em 1, caso o caractere NBSP esteja presente na string inicial, em vez de ficarmos com um suposto caractere 256, voltamos ao começo da tabela e ficamos com o ASCII 00. Aí que tá o problema, porque esse cara corresponde ao caractere NULL, que, como bem sabemos, é conhecido como delimitador. O que acontece, então, é o seguinte:
Perceba que aquele espaço entre os caracteres “1” e “2” na string de entrada é o tal do NBSP, além disso, a string resultante não imprime nada que venha após ele. Isso ocorre justamente porque quando somamos uma unidade, esse caractere se tornou o NULL, e a string passa a acabar ali!
Resposta
Se o último ASCII estiver presente em qualquer posição na string de entrada, ele se torna o caractere NULL (‘\0’), e a string final passa a terminar ali.