22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!