joao escreveu:Mauricio,
Concordo com vc que não irá funcionar porque eu esqueci desta linha aqui:
- Código: Selecionar todos
void main(void)
{
char *lista;
char * lista2;
linha = (char *) malloc(7*(char)); //Criando memória para ser gravada.
strcpy(lista,"i25632");
lista2 = lista;
printf("%s", lista2);
}
Salve, João.
Alocação dinâmica é diferente de declarar a dimensão de um vetor...
Na alocação dinâmica, o compilador aloca espaço dinamicamente, baseado nas informações que vc passa pra ele. Em tempo de execução.
SE houver memória disponível.
Mas até onde eu me lembro, em C não existe STRING. STRING em C é um char* que tem como ultima dado um '\0', que significa fim da string.
Aqui é que está o problema. De definição.
Exato. Não existe o tipo de dados STRING, em C.
E uma string, não é um ponteiro de um char. Uma string, é um VETOR de BYTES (uma matriz de caracteres - do tipo CHAR - BYTE).
Por sinal, todos os exemplos que vc usou são char * e não STRING.
Não. São todas STRING.
Quando a dimensão não é declarada, o compilador aloca o espaço, calculando pelo tamanho da string na inicialização. E o tamanho desse vetor, vai ser em função dessa atribuição e não vai poder mudar de tamanho mais, durante o programa.
Veja. O que eu criei não foi uma string, foi um vetor de bytes sem dimensão, que faz o compilador reservar 12 bytes, pra poder conter a frase quando eu inicializei a variável. Durante o programa, o vetor LISTA, é um vetor de bytes com comprimento 12. Atribuir uma string maior que o tamanho do vetor, durante o programa, vai causar problemas.
Só é uma string, pelo fato do texto da inicialização estar entre aspas.
Nesse caso, o compilador SABE que esse texto se refere à uma string. Por causa das aspas!
E só assim!
- Código: Selecionar todos
char lista [ ] = "DADO STRING";
[]'s