• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

72 italiano

[Resolvido] funçao strstr

7 mensagens neste tópico

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes ler todos os nomes e passwords e voltar a escrever o ficheiro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja cnsegui resolver isto lol.. dsculpem la a minha ignorancia e obrigado por tudo.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora