72 italiano Posted April 30, 2008 Report Share Posted April 30, 2008 boas.. estou com um pequeno GRANDE problema k nao consigo resolver e agradecia se alguem me pudesse ajudar pf .. eu tenho o seguinte pedaço de codigo: printf("Introduza a nova password \n\n:: "); scanf(" %s",&passA); a = strlen(passA); printf("Tem mesmo a certeza k a pretende alterar? (s/n)\n:: "); scanf(" %s",&x); if (strcmp(x,"s") == 0) { rewind(f); while (fscanf(f," %[^n]s",auxiliar) != EOF){ strcat(string,auxiliar);} str2 = strstr (string,pass); strncpy(str2,passA,a); printf("%s",string); //o printf é so pa testar porque funçao seria msmo para gravar no ficheiro com fprintf ou fputs o meu problema agora é o seguinte; para a substituiçao da nova PW pela antiga ser feita com sucesso a PW nova tinha k ter exactamente o mesmo length k a PW antiga.. ora isto é um problema visto k no ficheiro existem mais nomes e PW's.. O ficheiro esta organizado da seguinte forma: "nome" \n "pass" \n "nome" \n "pass" ... etc.. será k ha alguma maneira de eu fazer uma substituiçao sem interferir com o resto do ficheiro? (visto tb k o strcpy nao da pois apesar da substiuiçao ser bem executada o resto dos campos k se encontram por baixo desaparecem).. obrigado pela ajuda (espero ter sido explicito) Link to comment Share on other sites More sharing options...
TheDark Posted April 30, 2008 Report Share Posted April 30, 2008 Não podes ler todos os nomes e passwords e voltar a escrever o ficheiro? Desaparecido. Link to comment Share on other sites More sharing options...
72 italiano Posted April 30, 2008 Author Report Share Posted April 30, 2008 posso e é assim k tenho. leio o ficheiro todo para um array, e dps trabalho sempre sobre o array e no fim voltava a gravar tudo.. o meu problema esta na substituiçao das PW's pois kndo faço strncpy tenho k especificar o tamanho total da pass, pois se a PW nova for mais pekena k a antiga ela ficara com o resto dos caracteres da antiga á frente.. a funçao strcpy apesar de nao se ter k especificar o tamanho, ela substitui a PW antiga pela Nova mas o resto do array para a frente desaparece.. os caracteres seguinte onde estavam o resto dos campos desaparecem, isto é o array a partir dai fica vazio.. Link to comment Share on other sites More sharing options...
TheDark Posted April 30, 2008 Report Share Posted April 30, 2008 Tens só um array de char com todo o conteúdo do ficheiro? Embora não fosse isso que tinha em mente quando fiz a pergunta anterior, também podes trabalhar com isso. Já que sabes onde começa a password, substituis o 1º caracter da password por '\0' e colocas um apontador a apontar para o nome que está a seguir à password. Depois escreves com fprintf o array original, que parará automaticamente no '\0'; escreves de seguida a nova password; finalmente escreves a partir do apontador de que falei. A ideia é que, supondo que queres mudar a pass2, a string original "nome1\npass1\nnome2\npass2\nnome3\npass3" passe a "nome1\npass1\nnome2\n\0ass2\nnome3\npass3" e que o apontador fique a apontar para o n de "nome3". Desaparecido. Link to comment Share on other sites More sharing options...
72 italiano Posted May 1, 2008 Author Report Share Posted May 1, 2008 Bem visto, obrigado pela dica. eu percebi a ideia e já a pus em pratica mas ha so um pequeno problema agora que eu nao consigo resolver lol, como é k eu ponho um apontador a apontar para o nome seguinte?? (desculpem a minha ignorância mas é k ainda sou principiante nesta linguagem). Link to comment Share on other sites More sharing options...
72 italiano Posted May 1, 2008 Author Report Share Posted May 1, 2008 ja cnsegui resolver isto lol.. dsculpem la a minha ignorancia e obrigado por tudo. cumps Link to comment Share on other sites More sharing options...
TheDark Posted May 1, 2008 Report Share Posted May 1, 2008 Ainda bem que lá chegaste 😉 Só para dar a thread por terminada, era procurares pelo \n seguinte e apontares para o caracter imediatamente a seguir. Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now