Jump to content

[Resolvido] funçao strstr


72 italiano
 Share

Recommended Posts

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.