Documentação
  • Bem-vindo
  • Biblioteca Padrão
  • Características da linguagem
  • Comentários
  • Declaração e inicialização de variáveis
    • Inferência automática de tipos
  • Tipos de dados
    • Valores numéricos
    • Estruturas e Uniões de dados
      • Acessando os valores dos campos de estruturas
    • Strings e caracteres
      • Subtextos
      • Percorredores
    • Listas duplamente vinculadas
    • Conversão de tipos
  • Laços e Desvios condicionais
    • Lidando com vazamentos de memória em laços
  • Operadores
    • Precedência e Ordem de avaliação de operadores
  • Rotinas, Parâmetros e Funções
  • Trabalhando com Bibliotecas externas
  • Trabalhando com Instruções Hexadecimais
  • Callbacks
  • Introduzindo as palavras-chave "Preserve" e "original"
  • Usando a preposição "de"
  • Cores
  • Gráficos de Tartaruga (Turtle Graphics)
  • Algoritmos de Exemplo
    • Olá Mundo
    • A + B
    • Agenda Telefônica
    • Animação de sprites
    • Fatorial
    • 100 Portas
    • Dó Ré Mi Fá
    • API Win32 - GdipImageRotateFlip
    • Pintando como Claude Monet
    • Exemplo de interface
    • Evitando problemas de cintilação (Flickering)
    • Desenhando e pintando retângulos e caixas
    • Cofrinho Virtual
Fornecido por GitBook
Nesta página

Isto foi útil?

Editar no GitLab
  1. Tipos de dados
  2. Strings e caracteres

Subtextos

Um "subtexto" faz parte de uma string. Os subtextos são implementadas como uma estrutura similar a uma string — um par de ponteiros de bytes chamados caractere inicial e caractere final — o que torna o subtexto "compatível" com o tipo string.

O comando:

Lance um subtexto em uma string.

Faz com que o caractere inicial e o caractere final do subtexto englobem toda a string.

Dessa forma você pode percorrer através dos caracteres da string, indo para frente ou para trás. Para iso basta incrementar o valor do endereço do caractere inicial ou reduzir o valor do endereço do caractere final do subtexto.

Você também pode usar o comando:

Posicione um subtexto em uma string.

O comando acima define apenas o caractere inicial do subtexto, deixando o valor do caractere final inicialmente em branco, porém pronto para ser alterado. Ao definir e incrementar o valor do caractere final, você pode ir criando a substring um byte de cada vez.

Os subtextos são utilizados principalmente de forma conjunta com "percorredores".

Existem certas operações que não devem ser efetuadas em subtextos.

Primeiro, vamos olhar para o exemplo.

O código abaixo funciona corretamente...

Rotina para que se execute o programa:
  Atribua "abc" para uma string.

Já o código abaixo gera um vazamento de memória

Rotina para que se execute o programa:
  Atribua "abc" para um subtexto.

Por quê?

Porque a segunda versão é um abuso do tipo subtexto; ela usa o subtexto de uma forma para o qual ele não foi projetado.

Os subtextos devem ser referências para partes de outras strings reais.

E já que eles são referências, elas nunca são desalocadas automaticamente.

O código acima "vaza", porque o subtexto é (incorretamente) tratado como uma string e a memória é alocada quando a rotina "atribua uma string para outra string" é chamada.

Mas o tipo real da variável ainda é substring, então as rotinas de desalocação automática são ignoradas.

Em resumo, nunca "atribua" nada para um subtexto. "lance" ou "posicione" um subtexto em uma string, conforme descrito na página 110 do manual.

AnteriorStrings e caracteresPróximoPercorredores

Atualizado há 3 meses

Isto foi útil?