Dominando ponteiros de caracteres e uso de funções em C
O que é um ponteiro de caractere em C?
Um ponteiro de caractere armazena o endereço de um tipo de caractere ou endereço do primeiro caractere de uma matriz de caracteres (string). Os ponteiros de caracteres são muito úteis quando você está trabalhando para manipular as strings.
Não existe tipo de dados string em C. Um array do tipo "char" é considerado uma string. Conseqüentemente, um ponteiro de uma matriz do tipo char representa uma string. Este ponteiro char pode então ser passado como um argumento para uma função para processar a string.
Declarando um ponteiro de caractere
Um ponteiro de caractere aponta para um caractere ou matriz de caracteres. Assim, para declarar um ponteiro de caractere, use a seguinte sintaxe:
08Inicializando um ponteiro de caractere
Após declarar um ponteiro de caractere, você precisa inicializá-lo com o endereço de uma variável de caractere. Se houver uma matriz de caracteres, você pode simplesmente inicializar o ponteiro de caracteres fornecendo o nome da matriz de caracteres ou o endereço dos primeiros elementos dela.
Ponteiro de caractere
A seguir está a sintaxe para inicializar um ponteiro de caractere de um tipo de caractere:
17Ponteiro de caractere da matriz de caracteres
A seguir está a sintaxe para inicializar um ponteiro de caractere de uma matriz de caracteres (string):
25Exemplo de ponteiro de caractere
No exemplo a seguir, temos duas variáveis caractere e matriz de caracteres. We are taking two pointer variables to store the addresses of the character and character array, and then printing the values of the variables using the character pointers.
39Saída
Execute o código e verifique sua saída -
47Compreendendo o ponteiro de caractere
Uma string é declarada como um array da seguinte maneira -
55
A string é uma matriz de caracteres terminada em NULL. O último elemento da matriz acima é um caractere NULL (\0).
Declare um ponteiro do tipo char e atribua a ele o endereço do caractere na posição 0 -
68
Lembre-se de que o nome do array em si é o endereço do 0º elemento.
70
Uma string pode ser declarada usando um ponteiro em vez de uma variável de array (sem colchetes).
87
Isso faz com que a string seja armazenada na memória e seu endereço armazenado em ptr. Podemos percorrer a string incrementando o ptr.
97Acessando matriz de caracteres
Se você imprimir uma matriz de caracteres usando o especificador de formato %s, poderá fazê-lo usando o nome do ponteiro de caractere. Mas se você quiser acessar cada caractere da matriz de caracteres, deverá usar um asterisco (*) antes do nome do ponteiro do caractere e depois incrementá-lo.
Exemplo
Aqui está o código completo do programa -
104Saída
Execute o código e verifique sua saída -
111Exemplo
Alternativamente, passe ptr para printf() com formato %s para imprimir a string.
127Saída
Ao executar este código, você obterá a mesma saída -
131Funções de ponteiro de caractere
Os arquivos de cabeçalho "string.h" definem uma série de funções de biblioteca que executam o processamento de strings, como encontrar o comprimento de uma string, copiar uma string e comparar duas strings. Essas funções usam argumentos de ponteiro char.
A função strlen()
A função strlen() retorna o comprimento, ou seja, o número de caracteres em uma string. O protótipo da função strlen() é o seguinte -
143Exemplo 1
O código a seguir mostra como você pode imprimir o comprimento de uma string -
156
Quando você executa este código, ele produzirá a seguinte saída -
163Exemplo 2
Efetivamente, a função strlen() calcula o comprimento da string de acordo com a função definida pelo usuário str_len() conforme mostrado abaixo -
176
Quando você executa este código, ele produzirá a seguinte saída -
183A função strcpy()
O operador de atribuição ( =) não é usado para atribuir um valor de string a uma variável de string, ou seja, um ponteiro char. Em vez disso, precisamos usar a função strcpy() com o seguinte protótipo -
194Exemplo 1
O exemplo a seguir mostra como você pode usar a função strcpy() -
209
A função strcpy() retorna o ponteiro para a string de destino ptr1.
217Exemplo 2
Internamente, a função strcpy() implementa a seguinte lógica na função str_cpy() definida pelo usuário -
226
Quando você executa o código dele, ele produzirá a seguinte saída -
235
A função copia cada caractere da string de origem para o destino até que o caractere NULL "\0" seja alcançado. Após o loop, ele adiciona um caractere "\0" no final do array de destino.
A função strcmp()
Os operadores de comparação usuais (<,>, <=,>=, ==e !=) não podem ser usados para comparar duas strings. Em vez disso, precisamos usar a função strcmp() do arquivo de cabeçalho “string.h”. O protótipo desta função é o seguinte -
249
A função strcmp() tem três valores de retorno possíveis -
- Quando ambas as strings são idênticas, ele retorna "0".
- Quando o primeiro caractere não correspondente em str1 tem um valor ASCII maior que o caractere correspondente em str2, a função retorna um número inteiro positivo. Isso implica que str1 aparece depois de str2 em ordem alfabética, como em um dicionário.
- Quando o primeiro caractere não correspondente em str1 tem um valor ASCII menor que o caractere correspondente em str2, a função retorna um número inteiro negativo. Isso implica que str1 aparece antes de str2 em ordem alfabética, como em um dicionário.
Exemplo 1
O exemplo a seguir demonstra como você pode usar a função strcmp() em um programa C -
258
Execute o código e verifique sua saída -
262
Mude s1 para BACK e execute o código novamente. Agora, você obterá a seguinte saída -
277Exemplo 2
Você pode obter um resultado semelhante usando a função definida pelo usuário str_cmp(), conforme mostrado no código a seguir -
281
Quando você executa este código, ele produzirá a seguinte saída -
292
A função str_cmp() compara os caracteres no mesmo índice em uma string até que os caracteres em qualquer uma das strings se esgotem ou os caracteres sejam iguais.
No momento de detectar caracteres desiguais no mesmo índice, é retornada a diferença em seus valores ASCII. Ele retorna "0" quando o loop é encerrado.
Dominando ponteiros e matrizes multidimensionais em C Dominando membros flexíveis de array em estruturas C para tratamento dinâmico de dados
Linguagem C
- Construtor C#
- Como baixar e instalar o Visual Studio para C# no Windows
- C# if, if...else, if...else if e aninhado if declaração
- C Instrução Condicional:IF, IF Else e Aninhado IF Else com Exemplo
- Espaços de nomes em C++
- Modelos de classe C++
- C - Configuração do Ambiente
- Gerenciamento de memória C++:novo e excluir
- Fundição de tipo em C:conversão de tipo, implícito, explícito com exemplo
- C# - Conversão de tipo