Na ciência da computação, o caractere nulo (português brasileiro) ou carácter nulo (português europeu) (null character) ou terminador nulo é um caractere da tabela ASCII e do conjunto de caracteres Unicode cujo valor é 0 (zero).

Origem editar

Originalmente, este caracter tinha o mesmo significado da instrução NOP da linguagem assembly; quando enviada a uma impressora ou terminal de computador, ela não tinha qualquer efeito (alguns terminais, porém, mostravam esta instrução (erroneamente) como um espaço). Na fita perfurada este caractere é representado pela ausência de perfuração, consequentemente uma fita ainda não usada é completamente preenchida com caracteres nulos.

Carácter editar

Em muitos computadores e teclados de terminais de dados, é possível inserir um caracter nulo pressionando simultaneamente a tecla control e a tecla "@" (usualmente, além disso é necessário pressionar a tecla shift e outra tecla como a "2" ou "P"). Consequentemente, em alguns contextos, o caracter nulo é representado visualmente como "^@". Em outros contextos, ele é representado como símbolo subscrito, "NUL". No padrão Unicode, existe um caracter para representação visual do caracter nulo, o "símbolo para nulo", U+2400 — não deve ser confundido com o caracter nulo verdadeiro, U+0000.

O carácter nulo e a representação de strings editar

Na linguagem de programação C existe um significado especial para este caracter. Ele é utilizado para indicar o final de strings de caracteres. O caracter nulo é freqüentemente representado como "\0" no código fonte escrito em C. As strings finalizadas com o caracter nulo são conhecidas como "terminadas em nulo" (null-terminated).

Em algumas linguagens (como Pascal) o caracter nulo não é utilizado, pois as strings são armazenadas em um array precedido pelo tamanho desta string. A principal vantagem da utilização do caracter nulo em strings é que elas podem ter qualquer tamanho, e apenas um caracter adicional é necessário. As strings terminadas pelo caracter nulo podem ter vantagens de desempenho, já que operações que percorrem uma string não precisam manter o registro de quantos caracteres foram vistos, e operações que modificam o tamanho da string não precisam atualizar o array com o novo tamanho. O desempenho de cache também pode ser melhor.

Por outro lado, a vantagem em armazenar o tamanho da string é que ele fica disponível imediatamente; um programa utilizando strings terminadas em nulo precisa contar todos os caracteres para determinar o tamanho da string. Além disso, em strings não terminadas em nulo é possível incluir o caracter nulo no meio de uma string, simplificando o processamento de dados e eliminando exceções. Em strings terminadas em nulo, a primeira ocorrência de um caracter nulo é interpretada como o final da string.

Entretanto, o tipo de dado utilizado para armazenar o tamanho da string também é importante; se o tamanho é armazenado como um byte, como no Pascal, as strings tem um limite de tamanho de 255 caracteres. Tipos de dados maiores, por outro lado, tomam mais espaço de memória que o caracter nulo (um número de 16 bit ocupa dois bytes e um número de 32 bit ocupa quatro). Nos anos 70, quando a linguagem C foi projetada, os limites de espaço em memória eram considerados problemas muito mais importantes do que hoje, o que levou a escolha de strings terminadas com o caracter nulo.

Padronização editar

  • Um byte com todos os bits em 0, chamado de caracter nulo (null character), deve existir no conjunto básico de caracteres; ele é utilizado para terminar a string literal de caracteres. ANSI/ISO 9899:1990 (O padrão ANSI C), seção 5.2.1
  • Uma "string" é uma sequência contígua de caracteres terminados por e incluindo o primeiro caracter nulo. ANSI/ISO 9899:1990 (O padrão ANSI C), seção 7.1.1
  • Uma null-terminated byte string ou NTBS (string de bytes terminada por nulo) é uma sequência de caracteres cujo elemento de maior endereço, com conteúdo definido, possui o valor zero (o caracter nulo). ISO/IEC 14882 (O padrão ISO C++), seção 17.3.2.1.3.1