Mais esquisitices de strings...Se ponteiros e matrizes equivalem, porque não funciona a sequencia abaixo:
char nome[50];
nome = "joão";
tá, ele não pode associar um char[50] com um char[5]...tudo bem, mas se usar ponteiros, funciona:
char * nome = new char [50];
nome = "joão";
E tem um componente a mais, já que com ponteiros ficaria mais claro se fosse assim:
*nome++ = 'j';
*nome++ = 'o';
*nome++ = 'a';
*nome++ = 'o';
*nome = '\0';
nome = nome-4;
for (int i=0; i<5; i++) { cout << *nome++ ; }
Bem, problemas para pensar ...
Tchê.
sexta-feira, 15 de junho de 2007
Assinar:
Postar comentários (Atom)
2 comentários:
Para pensar um pouco mais: No primeiro exemplo, se colocar char nome[5] também não funciona. Não tem nada a ver com o número de posições de memória.
Outra coisa: se colocar ponteiros char* nome não precisa de new e nem definir o número de posições de memória. O código ficaria assim:
char* nome;
nome = "joao";
Sinistro...
De fato é sinistro. Pra mim parece que se o ponteiro aponta para uma variável do tipo char, então ele aloca espaço somente para 1 char e não para 5, como é o caso. Portanto, ele está avançando na memória sem nenhum tipo de controle. Funciona porque é pouco dado e usa pouca memória, mas se fosse um dado maior, acho que ia dar problema, porque poderia avançar na memória de outros dados. Por isso ainda é um pouco mais seguro definir pelo new char[50], apesar de que não tem nenhum controle sobre o tamanho da string lida...que magavilha !!
Postar um comentário