Uma string é um vector de caracteres terminado por '\0'
. Um vector de caracteres genérico não assume nada sobre o seu conteúdo: em particular, não define caracteres especiais.
A confusão dos dois conceitos é fonte de problemas. Veja-se o seguinte exemplo.
Ficheiro vecs.c #include <stdio.h> #include <string.h> main() { char a[] = { 'a', 'b', 'c', '\0' }; char b[] = "abc"; printf("%s %d %d\n", a, strlen(a), sizeof(a)); printf("%s %d %d\n", b, strlen(b), sizeof(b)); return 0; }
Se, no código acima, a parte a vermelho for incluÃda (terminador), então a
e b
serão idênticos. Caso contrário, nada garante que a seguir a 'c'
(em a
) exista um '\0'
. Os resultados podem ser surpreendentes... (ver exemplo abaixo).
Compilação e execução prompt% gcc -ansi -pedantic -Wall vecs.c -o vecs prompt% ./vecs abc@Ôïÿ¿ïÿ¿ØO@ @Ôïÿ¿¨ïÿ¿Â@ 33 3 abc 3 4