Olá
Gostaria de saber por que quando eu faço algo do tipo:
char sigla[7];
//insiro valores
printf("%s", sigla);
ele imprime uma string com 9 caracteres o.O
inclusive eu posso fazer:
sigla[7] = ' ';
sigla[8] = ' ';
que não ocorre segfault.
Oi Felipe,
Em qualquer vetor, seja ele de inteiro, reais ou caracteres, você consegue acessar espaços de memórias que estão fora do seu tamanho, desde que ela exista. Isso acontece porque quando fazemos v[x] equivale a fazermos &v + x, ou seja, pegamos o ponteiro para o vetor v e andamos mais x endereços à frente.
Com relação a string, você está tendo esse problema porque não esta setando o caracter de fim de string, esse marcador é representado por '\0'. Funciona assim, se você tem um vetor 's' de 'n' caracteres você deve fazer s[n] = '\0' para que o sistema saiba que a sua string acaba na posição n-1.
[]'s
Vinicius
Em qualquer vetor, seja ele de inteiro, reais ou caracteres, você consegue acessar espaços de memórias que estão fora do seu tamanho, desde que ela exista. Isso acontece porque quando fazemos v[x] equivale a fazermos &v + x, ou seja, pegamos o ponteiro para o vetor v e andamos mais x endereços à frente.
Com relação a string, você está tendo esse problema porque não esta setando o caracter de fim de string, esse marcador é representado por '\0'. Funciona assim, se você tem um vetor 's' de 'n' caracteres você deve fazer s[n] = '\0' para que o sistema saiba que a sua string acaba na posição n-1.
[]'s
Vinicius