Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
8. Cadeias de caracteres (strings)<br />
8.1 Introdução<br />
Como já sab<strong>em</strong>os uma declaração do tipo<br />
char Cad[10];<br />
define um conjunto de dez posições de m<strong>em</strong>ória, cada uma delas de um byte, capazes de armazenar variáveis<br />
do tipo char. Como diss<strong>em</strong>os de passag<strong>em</strong> no capítulo anterior, um vetor cujas componentes são do tipo<br />
char constitui uma cadeia de caracteres ou, <strong>em</strong>prestado do inglês, uma string.<br />
Além da quantidade de bytes, o que diferencia a declaração acima da declaração<br />
int v[10];<br />
é que, enquanto o vetor v não pode ser referenciado globalmente com um comando do tipo scanf("%v", v) ou<br />
printf("%v", v) os compiladores C contêm recursos para referência a uma string como se ela fosse uma<br />
variável simples.<br />
Desta forma, com a declaração acima, pod<strong>em</strong>os ter um programa como o seguinte:<br />
#include <br />
main()<br />
{<br />
char Cad[10];<br />
printf("Digite uma palavra");<br />
scanf("%s", Cad);<br />
printf("A palavra digitada foi: %s ", Cad);<br />
}<br />
Vale l<strong>em</strong>brar que, de acordo com o capítulo 2, "%s" tanto é o código de conversão da função scanf()<br />
para armazenamento de uma cadeia de caracteres como é o código de formatação da função printf() para<br />
exibição de uma string. Vale também observar a não colocação do operador de endereço & <strong>em</strong> scanf("%s",<br />
Cad). Para compreender este fato basta l<strong>em</strong>brar que um vetor é um ponteiro. Ainda vale observar que a<br />
tentativa de se armazenar <strong>em</strong> Cad uma cadeia com mais de 10 caracteres não é recusada pelo sist<strong>em</strong>a, mas<br />
pod<strong>em</strong> ocorrer armazenamentos indesejados. Para que o tamanho da cadeia não fique limitado, deve-se<br />
declarar a cadeia como um ponteiro: char *Cad;.<br />
Também é possível se fazer atribuições explícitas a uma string. Por ex<strong>em</strong>plo, poderíamos "sofisticar"<br />
o programa acima, escrevendo-o:<br />
#include <br />
main()<br />
{<br />
char Cad[40], Str[40] = "Digite uma palavra";<br />
printf("%s", Str);<br />
scanf("%s", Cad);<br />
printf("A palavra digitada foi: %s\n", Cad);<br />
}<br />
A referência explícita a uma string é possível pelo fato de que o sist<strong>em</strong>a coloca no final da cadeia o<br />
caractere nulo, indicado por '\0', tanto numa atribuição (como Str = "Digite uma palavra";) como numa<br />
entrada através da função scanf(). É este caractere nulo que indica ao sist<strong>em</strong>a o final da string para que ele<br />
possa processá-la de acordo com o pretendido, como exibi-la através da função printf(), por ex<strong>em</strong>plo.<br />
É necessário l<strong>em</strong>brar que a aposição automática do caractere nulo no final da string força se definir n<br />
numa declaração do tipo<br />
char Cad[n];<br />
uma unidade maior do que o número de caracteres da cadeia que se pretende armazenar <strong>em</strong> Cad.<br />
Neste formato de declaração, pode-se inicializar uma string quando da sua declaração, colocando o<br />
valor inicial pretendido entre chaves, que não são necessárias no Turbo C++ 3.0.