Em C para que serve o terminador nulo ( /0) em uma string?

oi!!!
Em C para que serve o terminador nulo ( /0) em uma string ???

obrigado!!!

pra indicar o final da string, pq como em C vc tem q por em um array de char de tamanho fixo, pode ser q vc tenha um array de 80 char e uma string de 40… se vc n por o \0 ele vai ateh encontrar um \0, como C n verifica o array, mesmo depois de passar os caracteres do seu array ele continua percorrendo a memoria ateh encontrar um \0…

Em C, strings nada mais são do que uma sequência de caracteres. Por caracter entenda-se qualquer coisa com representação binária entre 0 e 255!

Daí surgiu um pequeno probleminha: se qualquer coisa representável em binário é um caracter, quando uma string começa (outro detalhe do C: uma string começa onde um ponteiro para string - leia-se char[] - aponta), como o sistema operacional saberia quando terminar tal string? Daí convencionou-se que uma string termina no primeiro caracter nulo = todos bits 0, ou terminador, ou “\0”. Se num arquivo de gigabytes não ouver nenhum terminador, a string continua no arquivo/endereço fisicamente contiguo, até acabar a memória ou o hd!

Ou seja, como um byte tem um bit inicial e final, em C uma streing tambem tem que ter um edereço inicial e uma forma de determinar onde ela termina. Não existem espaços em branco no final! Sem \0, não é uma string válida para o C, ou muito provavelmente, não era o que o programador queria.

O inusitado é que um programador em C sabe (?) disso e pode intervir, enquanto que em outras linguagens somos apenas passageiros do que o SO determina!

alew pessoal ótima explicação!!
mas ficou uma dúvida, qdo eu uso strings eu tenho q colocar “/0” no código??? pq nos exemplos q estou vendo não esta sendo colocado, ele coloca automaticamante???

obrigado!!!

Exatamente,

O compilador faz isso automaticamente sem que seja necessário colocar manualmente o /0. É uma forma do interpretador saber que ali é o término de uma String.

Espero ter ajudado!

George.

  • Aham, mais ou menos.

Quando você tem algo como:

char *s = “Hello, world!”;

o compilador criou uma string e pôs automaticamente o \0 no final.

Quando você cria uma string a partir de caracteres (isso não é incomum em C), como isto:

char s[100];
s[0] = ‘A’; s[1] = ‘B’;

você precisa completar manualmente com o ‘\0’, então para completar o exemplo acima:
s[2] = ‘\0’;

para você ter a string “AB”.

Um complicador do C é que algumas rotinas põem automaticamente o ‘\0’ no final (como o strcpy), outras não põem (memcpy) e outras põem quando é possível (strncpy). Isso é muito chato, leva alguns anos para entender - por isso VIVA O JAVA!

obrigado!!
mas…
leva alguns anos?? por que??