IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Transformer du C en Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut Transformer du C en Qt
    bonjour a tous,
    voila j'ai un problème, j'ai réussi a faire un programme qui fonctionne en c mais quand je le passe sous qt il me ferme le programme savez vous pourquoi ?
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
            QString fileName = (ir.NomRonde+".bot");
            string name = fileName.toStdString();
            char** tab=(char**)malloc((10000)*sizeof(char*));
            char ** temp=tab;
            char* parcours=(char*)malloc((BUFSIZ)*sizeof(char));
            int j=0;
            FILE * fp=fopen("C:/WifiBot Controleur/Repertoire Ronde/"+name+".bot","r");
            if(fp==NULL)exit(1);
            while(fgets(parcours,BUFSIZ,fp)!=NULL)
            {
                temp[j]=(char*)malloc((strlen(parcours))*sizeof(char));
                strcpy(temp[j],parcours);
                j++;
            }
            int P = rt.P+6;
            int tableauB[8]= {0};
            int tableau1B[5]= {0};
            sscanf(tab[6],"P = %d,%d,%d,%d,%d,%d,%d,%d  //Date de modification = %d/%d/%d %d:%d\n",&tableauB[0], &tableauB[1], 
            &tableauB[2], &tableauB[3], &tableauB[4], &tableauB[5], 
            &tableauB[6],&tableauB[7],&tableau1B[0],&tableau1B[1],&tableau1B[2],&tableau1B[3],&tableau1B[4]);
            printf("%d,%d,%d,%d,%d,%d,%d,%d\n", tableauB[0], tableauB[1], tableauB[2],tableauB[3], tableauB[4], 
            tableauB[5],tableauB[6],tableauB[7]);
            sscanf(tab[P],"P = %d,%d,%d,%d,%d,%d,%d,%d  //Date de modification = %d/%d/%d %d:%d\n",&tableauB[0], &tableauB[1], 
            &tableauB[2], &tableauB[3], &tableauB[4], &tableauB[5], 
            &tableauB[6],&tableauB[7],&tableau1B[0],&tableau1B[1],&tableau1B[2],&tableau1B[3],&tableau1B[4]);
            printf("%d,%d,%d,%d,%d,%d,%d,%d\n", tableauB[0], tableauB[1], tableauB[2],tableauB[3], tableauB[4], 
            tableauB[5],tableauB[6],tableauB[7]);
            free(tab);
            free(parcours);

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Sûrement parce que le chemin de ton fichier n'est pas le bon. Tu as deux fois « .bot » :
    Une fois sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString fileName = (ir.NomRonde+".bot");
    Et une seconde fois ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE * fp=fopen("C:/WifiBot Controleur/Repertoire Ronde/"+name+".bot","r");
    Tu l'aurais facilement vu si tu avais affiché un message d'erreur avant ton exit(1); brutal.

    Bon sinon, je te conseille fortement d'utiliser un std::vector de std::string (ou QVector de QString) à la place, d'autant que tu as une fuite de mémoire : tu oublies de libérer tous les temp[j].

  3. #3
    Invité
    Invité(e)
    Par défaut
    La concaténation "C:/WifiBot Controleur/Repertoire Ronde/"+name donne un std::string là où fopen attend un const char *.
    Il te faut appeler la fonction membre .c_str() sur ce retour.

    Sinon, la façon C++ de le faire : Comment faire pour lire un fichier ligne par ligne ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    désolé j'ai supprimer le message d'avant car j'ai compris le message d’erreur après que je tes répondu

    je vais checker ça merci

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    jai fait ce que tu ma dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            QString fileName = (ir.NomRonde+".bot");
            string name = fileName.toStdString();
            const char* name2 = name.c_str();
    mais voila le problème il veux un const char, mais je n'arrive pas a passer un const char* en const char, connais tu un moyen pour y arriver ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    erreur : invalid operands of types 'const char [40]' and 'const char*' to binary 'operator+'
             FILE * fp=fopen("C:/WifiBot Controleur/Repertoire Ronde/"+name2,"r");
                                                                       ^

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est pas tout à fait ce que j'ai dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QString fileName = ir.NomRonde + ".bot";
    std::string name = fileName.toStdString();
    std::string name2 = "C:/WifiBot Controleur/Repertoire Ronde/" + name; // c'est sur ce retour-ci qu'il faut appliquer .cstr(), pas avant
    FILE * fp=fopen(name2.c_str(), "r");
    Tu peux effectuer une concaténation avec + entre un std::string et " ... " ou deux std::string, mais pas entre deux " ... "/const char*.

    Tu peux aussi simplement effectuer les deux concaténations ensemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString fileName = "C:/WifiBot Controleur/Repertoire Ronde/" + ir.NomRonde + ".bot";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo