pierao Postado Agosto 13, 2012 Denunciar Share Postado Agosto 13, 2012 boa tarde pessoalBoa tarde pessoal.To fazendo um programa que eu tenho que copiar as strings do ARGV[] para um vetor de ponteiros.int main(int argc, char** argv) { int j, i, x, m, n,status, cont; int k; char* comandi[10]; k=0; n=argc; k=atoi(argv[1]); for(cont=0;cont<k;cont++) { comandi[i]=strdup(argv[i+1]); } //x=paralelo(k); printf("os comandos são: %s\n %s\n %s\n ", comandi[0], comandi[1], comandi[2]); }O problema é que se eu deixar a linha "k=atoi(argv[1]);" ele me da segmentation fault na hora de chamar o programa pelo nome, por exemplo./programa 5 file1 file2 file3ele teria em argv[1] a string "5"com o atoi eu transformaria ela pra um inteiro e armazenaria o valor em "k", correto ?Mesmo assim, tirando a linha k=... o programa roda e me retorna uns caracteres ilegeiveis no printf final.alguém pode me dizer q q eu to fazendo de errado ?já tentei até usar o strdup pra alocar a memoria mas mesmo assim acho q eu to fazendo algo errado.ajuda ??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Agosto 14, 2012 Denunciar Share Postado Agosto 14, 2012 Olá!O seu problema está no for. Quando você tira a linha do atoi, k passa a valer zero e assim não entra no for e não gera o erro.Os caracteres estranhos quando não tem o atoi é porque a variável comandi não recebeu valor algum e portanto tem apenas lixo...O erro em si é porque no for você usa a variável cont mas no comandi você usa i. A variável i não tem valor algum, o que não significa zero.Em C, uma variável que não recebeu valor algum (não inicializada) possui qualquer valor. Assim você está acessando um valor além das dez posições reservadas ou até mesmo uma posição anterior no caso de i ter um valor negativo.Para resolver o seu problema basta substituir i por cont no índice de comandi e no argv dentro do strdup.Mais uma coisa: argc contém o número de parâmetros passados na linha de comando. Assim não precisa do parâmetro numérico na linha de comando, basta usar argc para saber o número de argumentos recebidos.Qualquer dúvida avise!Abraços,Marcelo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 pierao Postado Agosto 14, 2012 Autor Denunciar Share Postado Agosto 14, 2012 muito bom marcelo, obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
pierao
boa tarde pessoal
Boa tarde pessoal.
To fazendo um programa que eu tenho que copiar as strings do ARGV[] para um vetor de ponteiros.
O problema é que se eu deixar a linha "k=atoi(argv[1]);" ele me da segmentation fault na hora de chamar o programa pelo nome, por exemplo
./programa 5 file1 file2 file3
ele teria em argv[1] a string "5"
com o atoi eu transformaria ela pra um inteiro e armazenaria o valor em "k", correto ?
Mesmo assim, tirando a linha k=... o programa roda e me retorna uns caracteres ilegeiveis no printf final.
alguém pode me dizer q q eu to fazendo de errado ?
já tentei até usar o strdup pra alocar a memoria mas mesmo assim acho q eu to fazendo algo errado.
ajuda ???
Link para o comentário
Compartilhar em outros sites
2 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.