ericmoraess Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 (editado) Olá pessoal...estou escrevendo um código onde se viu a necessidade de ter uma matriz dinâmica. Escolhi implementar utilizando ponteiro para ponteiro e fiz o seguinte código :...char **files;...(files) = (char**)malloc( 50 * sizeof(char));for( j = 0 ; j < 50 i ; j++ ){*(files+j) = (char*)malloc(50*sizeof(char));strcpy( *( files + j ) , "eric" );}printf("primeiro elemento é : %s " , *( files + 0 ) ) ;Ok, mas o resultado que deveria ser eric não é exibido..é exibido um lixo de memória...Explicação ://aloco espaço para 50 ponteiros.(files) = (char**)malloc( 50 * sizeof(char));//cada ponteiro eu aloco mais 50 posições*(files+j) = (char*)malloc(50*sizeof(char));//em cada ponteiro eu guardo uma string.strcpy( *( files + j ) , "eric" );Bem...antes que sugiram que seja a quantidade de memória alocada, eu testo cada alocação efetuada...não postei pra não complicar o código...um caso interessante é o seguinte caso eu venha a fazer o seguinte :load = (char**)malloc( 50 * sizeof(char));*load = (char*)malloc(50*sizeof(char));*(load+1) = (char*)malloc(50*sizeof(char));*(load+2) = (char*)malloc(50*sizeof(char));*(load+3) = (char*)malloc(50*sizeof(char));*(load+4) = (char*)malloc(50*sizeof(char));*(load+5) = (char*)malloc(50*sizeof(char));*(load+6) = (char*)malloc(50*sizeof(char));*(load+7) = (char*)malloc(50*sizeof(char));*(load+8) = (char*)malloc(50*sizeof(char));*(load+9) = (char*)malloc(50*sizeof(char));*(load+10) = (char*)malloc(50*sizeof(char));*(load+11) = (char*)malloc(50*sizeof(char));*(load+12) = (char*)malloc(50*sizeof(char));//continua...strcpy( *( files + 9 ) , "eric" );printf("nono elemento é : %s " , *( files + 8 ) ); //exibe com sucesso...Alguém tem alguma dica a dar ? Algo me intriga com o strcpy(); Editado Janeiro 3, 2009 por ericmoraess Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 Como files é um char**, as 50 posições inicialmente devem ter o tamanho de char*, e não char;(files) = (char**)malloc( 50 * sizeof(char*)); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ericmoraess Postado Janeiro 3, 2009 Autor Denunciar Share Postado Janeiro 3, 2009 bem primeiramente agradeço, foi justamente isso :) :blush: por errar um detalhe desses... :lol: pela a lição...É bom que na próxima eu não erro mais esses tipos ;)Obrigado.como eu fecho o tópico ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GabrielCardelli Postado Janeiro 3, 2009 Denunciar Share Postado Janeiro 3, 2009 Edita seu primeiro post poe (Resolvido) antes do titulo do tópico.Sobre trancar somente um moderador!Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
ericmoraess
Olá pessoal...estou escrevendo um código onde se viu a necessidade de ter uma matriz dinâmica. Escolhi implementar utilizando ponteiro para ponteiro e fiz o seguinte código :
...
char **files;
.
.
.
(files) = (char**)malloc( 50 * sizeof(char));
for( j = 0 ; j < 50 i ; j++ ){
*(files+j) = (char*)malloc(50*sizeof(char));
strcpy( *( files + j ) , "eric" );
}
printf("primeiro elemento é : %s " , *( files + 0 ) ) ;
Ok, mas o resultado que deveria ser eric não é exibido..é exibido um lixo de memória...
Explicação :
//aloco espaço para 50 ponteiros.
(files) = (char**)malloc( 50 * sizeof(char));
//cada ponteiro eu aloco mais 50 posições
*(files+j) = (char*)malloc(50*sizeof(char));
//em cada ponteiro eu guardo uma string.
strcpy( *( files + j ) , "eric" );
Bem...antes que sugiram que seja a quantidade de memória alocada, eu testo cada alocação efetuada...não postei pra não complicar o código...
um caso interessante é o seguinte caso eu venha a fazer o seguinte :
load = (char**)malloc( 50 * sizeof(char));
*load = (char*)malloc(50*sizeof(char));
*(load+1) = (char*)malloc(50*sizeof(char));
*(load+2) = (char*)malloc(50*sizeof(char));
*(load+3) = (char*)malloc(50*sizeof(char));
*(load+4) = (char*)malloc(50*sizeof(char));
*(load+5) = (char*)malloc(50*sizeof(char));
*(load+6) = (char*)malloc(50*sizeof(char));
*(load+7) = (char*)malloc(50*sizeof(char));
*(load+8) = (char*)malloc(50*sizeof(char));
*(load+9) = (char*)malloc(50*sizeof(char));
*(load+10) = (char*)malloc(50*sizeof(char));
*(load+11) = (char*)malloc(50*sizeof(char));
*(load+12) = (char*)malloc(50*sizeof(char));
//continua...
strcpy( *( files + 9 ) , "eric" );
printf("nono elemento é : %s " , *( files + 8 ) ); //exibe com sucesso...
Alguém tem alguma dica a dar ? Algo me intriga com o strcpy();
Editado por ericmoraessLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.