2010-08-22 6 views
0

Je suis un noob complet à c. J'ai téléchargé un code sur internet. Il génère toutes les combinaisons possibles de caractères. Je veux transférer cette sortie dans un fichier texte. J'ai essayé peu de choses mais je suis incapable de le faire. Quelqu'un peut-il me suggérer les changements nécessaires? Voici le code.atransfert de sortie vers un nouveau fichier

EDIT: J'ai changé la commande put en fputs. j'ai essayé toutes les combinaisons possibles.fputs (& str [1], f), fputs ("& str [1]", "f"), fputs ("& str [1]", f) et fputs (& str, "F"). mais rien n'a fonctionné. que faire ensuite?

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define MINCHAR 33 
#define MAXCHAR 126 

char *bruteforce(int passlen, int *ntries); 

int main(void) { 

    int i, wdlen, counter; 
    char *str; 
    clock_t start, end; 
    double elapsed; 
    FILE *myfile; 
    myfile = fopen("ranjit.txt","w"); 

    do { 
     printf("Word length... "); 
     scanf("%d", &wdlen); 
    } while(wdlen<2); 

    start = clock(); 

    bruteforce(wdlen, &counter); 

    end = clock(); 

    elapsed = ((double) (end - start))/CLOCKS_PER_SEC; 
    fprintf(myfile,"\nNum of tries... %d \n",counter); 
    fprintf(myfile,"\nTime elapsed... %f seconds\n",elapsed); 
    return counter; 

} 

char *bruteforce(int passlen, int *ntries) { 

    int i; 
    char *str; 
    FILE *f; 
    f = fopen("sandip.txt","w"); 

    *ntries=0; 

    passlen++; 

    str = (char*)malloc(passlen*sizeof(char)); 

    for(i=0; i<passlen; i++) { 
     str[i]=MINCHAR; 
    } 
    str[passlen]='\0'; 

    while(str[0]<MINCHAR+1) { 
     for(i=MINCHAR; i<=MAXCHAR; i++) { 
      str[passlen-1]=i; 
      (*ntries)++; 
      fputs("&str[1]",f); 
     } 

     if(str[passlen-1]>=MAXCHAR) { 
      str[passlen-1]=MINCHAR; 
      str[passlen-1-1]++; 
     } 

     for(i=passlen-1-1; i>=0; i--) { 
      if(str[i]>MAXCHAR) { 
       str[i]=MINCHAR; 
       str[i-1]++; 
      } 
     } 
    } 

    return NULL; 

} 
+0

En utilisant GNU/Linux ou un autre système compatible POSIX? Ensuite, le moyen le plus simple est de rediriger la sortie vers un fichier, comme ./votre programme> outfile.txt .. Cela devrait également être possible à partir de Windows, mais je ne sais pas comment. – Johan

+0

@Johan, cela fonctionne sur les fenêtres exactement de la même manière –

+0

merci pour la suggestion des gars, mais cette méthode ne fonctionnera pas pour moi. – user427685

Répondre

2

Remplacer puts avec fputs, qui prend un FILE* comme second argument. Vous devrez le transmettre à bruteforce.

+0

merci mathepic. Je vais google la syntaxe de fputs. – user427685

+0

@ user427685: Il serait bon que Mathepic accepte la réponse. – fuz

+0

@FUZxxl Je ne peux pas accepter la réponse. – alternative

0

Pour ce que ça vaut la peine, vous pouvez utiliser la redirection de shell pour créer un fichier avec la sortie ...

./myprogram > output.txt 
+1

Sortie de ce programme va travailler en entrée pour les autres, donc je ne peux pas utiliser cette méthode. – user427685

+0

Utilisez un tuyau! './program1 | ./program2' fonctionnera. Vous pouvez également utiliser './program1> tmp && ./program2 alternative

+0

Je ne l'ai pas expliqué plus tôt correctement. C'est comme deux fonctions d'un programme. la sortie d'une fonction fonctionnera comme entrée pour d'autres. Impossible d'utiliser la ligne de commande. – user427685

Questions connexes