72 italiano Posted April 30, 2008 at 06:41 PM Report Share #182690 Posted April 30, 2008 at 06:41 PM 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 at 06:53 PM Report Share #182696 Posted April 30, 2008 at 06:53 PM 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 at 06:57 PM Author Report Share #182699 Posted April 30, 2008 at 06:57 PM 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 at 07:32 PM Report Share #182708 Posted April 30, 2008 at 07:32 PM 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 at 04:04 PM Author Report Share #182835 Posted May 1, 2008 at 04:04 PM 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 at 07:36 PM Author Report Share #182875 Posted May 1, 2008 at 07:36 PM 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 at 10:31 PM Report Share #182931 Posted May 1, 2008 at 10:31 PM 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