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

C Discussion :

[encodage] Lecture/écriture dans des fichiers


Sujet :

C

  1. #1
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut [encodage] Lecture/écriture dans des fichiers
    Bonjour à tous,

    Actuellement j'ai mis au point un programme qui me permet de colorier mon code afin de l'afficher sur une page web (pour un petit exemple, voir sur http://spootnikdev.dyndns.org/progra...c=AGLContext.c (c'est un site perso hébergé sur mon Mac que je laisse à disposition de 9h à 22h minimum ->heure de France)). Pour la 1e version de ce logiciel, j'ai utilisé une bibliothèque sépcifique à mon système (Mac OS X) et qui gère donc elle-même l'encodage.

    Je cherche maintenant à obtenir le même programme, mais cette fois ci en utilisant des fichiers d'en-tête génériques (stdlib.h, stdio.h et string.h).

    J'ai donc adapté mon code à ces "headers". Le programme fonctionne sans erreur apparente, mais lorsque je regarde le fichier coloré (en HTML), j'obtiens plein de symboles étranges, alors que d'autres parties apparaissent clairement.

    cÿýèoÿýèmÿýèpÿýèlÿýèeÿýètÿýèeÿýèlÿýèyÿýèd.\n");
    break;
    }
    break;
    Je pense que le problème vient de mes méthodes d'écriture/lecture dans mes fichiers (fichier de code comme source et fichier HTML comme destination).

    Mon code n'est peut-être pas très "propre"

    Voici ma méthode de lecture (la fonction strFromStrings() est décrite plus bas) :

    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
     
    #define TAILLE_MAX 4096
     
    char *readFromFile(const char *path){
         char *cData = "";
         FILE* fichier = NULL;
         char chaine[4096] = "";
     
         fichier = fopen(path, "r");
     
         if (fichier != NULL){
              while (fgets(chaine, TAILLE_MAX, fichier) != NULL){
                   cData = strFromStrings(cData, chaine);
              }
              fclose(fichier);
         } else {
              return NULL;
         }
     
         return cData;
    }
    et ma méthode d'écriture :

    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
     
    unsigned char writeToFile(const char *path, const char *data){
         FILE* fichier = NULL;
     
        fichier = fopen(path, "w");
     
         if (fichier != NULL){
              unsigned int lgt = strlen(data);
              unsigned int i = 0;
              for (i = 0;i < lgt;i++){
                   fputc( data[i], fichier);
              }
              fclose(fichier);
              return 1;
         } else {
              return NULL;
         }
    }
    Ma fonction writeToFile() renvoie NULL en cas d'erreur lors de l'écriture.

    Mais à part ces méthodes simples de lecture/écriture, je ne sais pas du tout comment gérer l'encodage (si le problème est bien l'encodage). Je sais qu'il existe la bibliothèque libiconv, mais je n'arrive pas du tout à m'en servir.


    J'aimerais aussi avoir vos avis sur un nettoyage du code que j'utilise pour assembler des chaines de caractère. Je suis sûr qu'il y a plus propre

    Voici mon code d'assemblage (à la barbare):

    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
     
    #include <stdlib.h>
     
    char *strFromStrings(char *str1, char *str2){
         unsigned int len1, len2;
         len1 = strlen(str1);
         len2 = strlen(str2);
     
         char *strCat = malloc(sizeof(char) * (len1 + len2));
         unsigned long i = 0;
         for(i = 0; i < len1;i++){
              strCat[i] = str1[i];
         }
         for(;i < (len1 + len2);i++){
              strCat[i] = str2[i - len1];
         }
     
         return strCat;
    }
    Pour info, il n'y a eu aucun bug de mémoire lorsque j'ai testé mon programme.

    Merci à tous

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Pour info, il n'y a eu aucun bug de mémoire lorsque j'ai testé mon programme.
    Hum. Est-tu bien conscient qu'une chaine est terminée par un 0 ? Parce que quand je vois ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         unsigned int len1, len2;
         len1 = strlen(str1);
         len2 = strlen(str2);
         char *strCat = malloc(sizeof(char) * (len1 + len2));
    j'ai peur...

    D'autre part, pourquoi tu n'utilises pas strcpy() et strcat() au lieu de ces boucles ?

    Voici ton code mis au point (chargement).

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    #define TAILLE_MAX 4096
     
    static char *strFromStrings (char *str1, char *const str2)
    {
       char *strCat = NULL;
       size_t len1 = (str1 == NULL) ? 0 : strlen (str1);
     
       void *tmp = realloc (str1, len1 + strlen (str2) + 1);
     
       if (tmp != NULL)
       {
          strCat = tmp;
          if (str1 == NULL)
          {
             strcpy (strCat, "");
          }
          strcat (strCat, str2);
       }
       else
       {
          free (strCat), strCat = NULL;
       }
     
       return strCat;
    }
     
    static char *readFromFile (const char *path)
    {
       char *cData = NULL;
     
       FILE *fichier = fopen (path, "r");
     
       if (fichier != NULL)
       {
          char chaine[TAILLE_MAX] = "";
     
          while (fgets (chaine, TAILLE_MAX, fichier) != NULL)
          {
             cData = strFromStrings (cData, chaine);
             if (cData == NULL)
             {
                puts ("memory error");
                break;
             }
          }
          fclose (fichier);
       }
       else
       {
          return NULL;
       }
     
       return cData;
    }
     
    #if 0
    static unsigned int writeToFile (const char *path, const char *data)
    {
       FILE *fichier = fopen (path, "w");
     
       if (fichier != NULL)
       {
          unsigned int lgt = strlen (data);
          unsigned int i = 0;
          for (i = 0; i < lgt; i++)
          {
             fputc (data[i], fichier);
          }
          fclose (fichier);
          return 1;
       }
       else
       {
          return 0;
       }
    }
    #endif
     
    int main (void)
    {
       char *s = readFromFile ("main.c");
       if (s != NULL)
       {
          printf ("%s", s);
          fflush (stdout);
          free (s), s = NULL;
       }
       return 0;
    }
    Il fallait utiliser realloc()... On doit pouvoir faire plus efficace, mais ce code est correct et fonctionnel. Il libère la mémoire correctement.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    [HS]
    Emmanuel tu as un programme qui se charge de corriger,d'indenter, "de mettre en forme" les codes source parce qu'a chaque fois la rapidité avec laquelle tu le fais cela m'epoustoufle.
    [/HS]
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    [HS]
    Emmanuel tu as un programme qui se charge de corriger,d'indenter, "de mettre en forme" les codes source parce qu'a chaque fois la rapidité avec laquelle tu le fais cela m'epoustoufle.
    [/HS]
    Ben, c'est intégré dans Code::Blocks (Plugins/Astyle), sinon, j'utilise plutôt GNUIndent 1.91 :

    http://emmanuel-delahaye.developpez....tm#indentation
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Tout d'abord, merci beaucoup Emmanuel, et après… ben la suite

    Hum. Est-tu bien conscient qu'une chaine est terminée par un 0 ? Parce que quand je vois ça :
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         unsigned int len1, len2;
         len1 = strlen(str1);
         len2 = strlen(str2);
         char *strCat = malloc(sizeof(char) * (len1 + len2));
    j'ai peur...
    Oui j'en suis conscient, mais vu que je n'ai eu aucun problème de mémoire à cause de ça, je n'ai pas pris la peine de le corriger.

    De plus, j'avais déjà vu des assemblages utilisant realloc(), mais j'obtiens à chaque fois (et encore cette fois-ci avec ton code) une erreur :

    *** malloc[1973]: error for object 0x4378: Pointer being reallocated was not allocated
    Ce qui signifie, si j'ai bien compris, que ma chaine de caractère que je lui ai passé n'avait pas été allouée. Je suis en train de voir comment régler ça…

    À par ça, mon compilateur (GCC) n'a pas aimé les static que tu as ajouté, et j'ai dû les enlever pour qu'il arrête de râler. J'avais les messages suivants :

    Compiling Utilities.c
    Utilities.c:42: warning: `readFromFile' defined but not used
    Utilities.c:72: warning: `writeToFile' defined but not used

    Compiling main.c
    Utilities.h:10: warning: `strFromStrings' used but never defined
    Utilities.h:12: warning: `readFromFile' declared `static' but never defined
    Utilities.h:13: warning: `writeToFile' declared `static' but never defined

    Compiling CIntendation.h
    Utilities.h:10: warning: `strFromStrings' used but never defined
    Utilities.h:12: warning: `readFromFile' declared `static' but never defined
    Utilities.h:13: warning: `writeToFile' declared `static' but never defined


    ld: warning prebinding disabled because of undefined symbols
    ld: Undefined symbols:
    _readFromFile
    _strFromStrings
    _writeToFile
    En espérant que cela peut t'aider

    P.S.: je n'ai pas encore eu le temps d'essayer de tout corriger (afin d'arranger les problèmes), je posterai un nouveau message pour te tenir au courant.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Oui j'en suis conscient, mais vu que je n'ai eu aucun problème de mémoire à cause de ça, je n'ai pas pris la peine de le corriger.
    C'est une erreur grave. (Comportement indéfini).

    http://emmanuel-delahaye.developpez.com/notes.htm#ub

    De plus, j'avais déjà vu des assemblages utilisant realloc(), mais j'obtiens à chaque fois (et encore cette fois-ci avec ton code) une erreur :
    C'est pas normal. Mon code est conforme. Le premier realloc() se fait à partir d'un pointeur NULL, ce qui est tout à fait légal (même comportement que malloc().
    Ce qui signifie, si j'ai bien compris, que ma chaine de caractère que je lui ai passé n'avait pas été allouée. Je suis en train de voir comment régler ça…
    Moi, j'ai mis NULL. Si tu as mis autre chose, je ne répond de rien. encore une fois, mon code est conforme.
    À par ça, mon compilateur (GCC) n'a pas aimé les static que tu as ajouté, et j'ai dû les enlever pour qu'il arrête de râler. J'avais les messages suivants :
    Encore une fois mon code est correct. Si tu fais de la compilation séparée, il ne faut évidement pas que les fonctions exportées soient 'static'.

    http://emmanuel-delahaye.developpez....tes.htm#static

    Comme tu as posté du code partiel, il a bien fallu que je bouche les trous...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    En ce qui concerne realloc(), je n'ai pas touché à l'intérieur de tes fonctions, j'ai juste enlevé les static.

    Voici le schéma de mon programme :

    A -> B signifie A inclut B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    main.c -> Utilities.h
           -> CIntendation.h
     
     
    Utilities.c -> Utilities.h
     
     
    CIntendation.c -> CIntendation.h
                   -> Utilities.h
    Donc en gros, mes 3 fonctions qui posent problème (readFromFile(), strFromStrings(), writeToFile()) sont déclarées dans le fichier d'en-tête Utilities.h. Et tous les fichiers d'implementation font appel à lui.

    Au fait, je précise bien que j'utilise le C et non pas le C++…

    Moi, j'ai mis NULL. Si tu as mis autre chose, je ne répond de rien. encore une fois, mon code est conforme.
    Je n'y ai pas touché.

    D'après le lien que tu m'as indiqué je ne dois pas utiliser static, mais il reste toujours le problème du realloc(), et c'est ce qui m'a empêché jusqu'à maintenant d'utiliser un code plus "propre" (mis à par les fautes plus graves de ma part).

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    En ce qui concerne realloc(), je n'ai pas touché à l'intérieur de tes fonctions, j'ai juste enlevé les static.
    OK. Mais je parle de l'initialisation du pointeur dans readFromFile().

    Tu mettais évidemment, ça foire, on ne peut pas réallouer "". Par contre, je mets et là, ça marche, c'est certain.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    yeaaaaaaaaaaaaaah

    merci beaucoup beaucoup ça marche

    P.S.: j'ai sûrement pris de mauvaises habitudes, ou du moins je n'ai pas appris certaines, car la plupart du temps j'utilise des bibliothèques spécifiques à mon système Mac et qui m'évitent donc ce genre de problème.

  10. #10
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    ah non merde attends…
    je crois que je me suis planté, ça marchait avec ma bibliothèque spécifique, erf maintenant j'ai un autre bug (et de mémoire cette fois-ci). Bon je vais chercher… c'est quand mon programme appelle strlen()…

    bon pour strlen() c'est corrigé, mais maintenant je me retrouve avec le même problème de realloc()…

  11. #11
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Bon finallement, je pense que le mieu reste de publier le code complet, afin de faciliter la compréhension de mon programme.

    Le code est disponible sur : http://perso.orange.fr/c.sobecki/spo...nder-1.0.0.zip

    Bon développement

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Bon finallement, je pense que le mieu reste de publier le code complet, afin de faciliter la compréhension de mon programme.

    Le code est disponible sur : http://perso.orange.fr/c.sobecki/spo...nder-1.0.0.zip
    Je te conseille de mieux regler ton compilateur :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    et de considérer les chaines littérales 'non-modifiables' (il faut sans doute ajouter des 'const' où c'est nécessaire).

    Parce que là, c'est un peu horrible... (P.J.)

    strcasestr() n'est pas standard...
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt err.txt (23,9 Ko, 141 affichages)
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    ah oui en effet, vu comme ça c'est plutôt horrible. Pour la compilation j'ai utilisé l'IDE de mon Mac : Xcode. Et lorsque je compile… 0 erreur 0 danger.

    Merci beaucoup pour le rapport d'erreur je règle tout ça

  14. #14
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    voila, j'ai fait le ménage, enfin je pense. Il me reste juste une trentaine d'avertissements (soit très peu par rapport aux 190 que j'avais) que je n'arrive pas à régler. En fait je ne comprends pas où est le problème.

    CIntendation.c:491: passing arg 1 of `breakWordAndAddChar' with different width due to prototype

    J'ai la même erreur à chaque fois que je passe un caractère comme argument, pourtant j'ai bien spécifié char comme argument à recevoir…

    Les nouvelles sources (corrigées) sont disponible sur http://perso.orange.fr/c.sobecki/spo...nder-1.0.1.zip

    Encore merci pour ton aide Emmanuel

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Bon finallement, je pense que le mieu reste de publier le code complet, afin de faciliter la compréhension de mon programme.

    Le code est disponible sur : http://perso.orange.fr/c.sobecki/spo...nder-1.0.0.zip

    Bon développement
    Ceci fonctionne... Bien lire les commentaires...
    Fichiers attachés Fichiers attachés
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Trop bien ! merci pour les explications !

    J'ai juste quelques petits trucs qui me tracassent.
    Pourquoi utiliser char const* au lieu de const char* ?
    Que signifie H_ED_UTILITIES_20070121165150 (à part que j 'y vois '21 janvier 2007 à 16h51 et 50s' ?
    Quant à strdup(), je l'avais déjà vu mais je ne pensais pas qu'il pouvait être aussi utile

    En tout cas merci beaucoup beaucoup pour ton aide et tes corrections , tout fonctionne à merveille, plus aucun souci de symboles étranges !

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Pourquoi utiliser char const* au lieu de const char* ?
    Je ne parlerais pas pour Emmanuel, mais je pense que c'est par soucis de constistance: const s'applique sur le type immédiatement à sa gauche, SAUF s'il n'y a rien à gauche. Ainsi, const char * représente l'exception, et char const * la règle.
    Compare avec char * const et char const * const.
    Que signifie H_ED_UTILITIES_20070121165150 (à part que j 'y vois '21 janvier 2007 à 16h51 et 50s' ?
    C'est ce qu'on appelle un garde d'inclusion. Cela évite les problèmes si le fichier d'en-tête est inclus deux fois (très fréquent si un fichier d'en-tête en inclut un autre).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Trop bien ! merci pour les explications !
    On doit pouvoir factoriser du code, supprimer ces globales infâmes, traiter différemment C et C++ (se sont des langages différents) etc.
    Pourquoi utiliser char const* au lieu de const char* ?
    C'est pareil. Par contre avant ou après l'*, c'est très différent...
    Que signifie H_ED_UTILITIES_20070121165150 (à part que j 'y vois '21 janvier 2007 à 16h51 et 50s' ?
    Exactement.

    http://emmanuel-delahaye.developpez....ganiser_source

    C'est une définition 'unique dans le monde' qui permet de réaliser une protection efficace contre les inclusions multiples (j'ai fait un utilitaire qui fait ça automatiquement).

    En tout cas merci beaucoup beaucoup pour ton aide et tes corrections , tout fonctionne à merveille, plus aucun souci de symboles étranges !
    J'espère que tu as compris les corrections. Une chaine doit toujours être valide. L'adresse d'un char n'est pas une chaine valide, d'où le comportement indéterminé.
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Au fait, je t'ai rajouté parmis les créateurs de ce petit programme. Enfin si tu n'as pas envie dis le.

    Ca donne :

    Bienvenue dans Intender 1.0.1 Beta
    Cree par Lucas Soltic (http://spootnikdev.dyndns.org/)
    et Emmanuel Delahaye (http://emmanuel-delahaye.developpez.com/)

    Initialisation de Intender...

    Entrez l'adresse complete du fichier contenant le code a convertir pour le Web :
    ->/file.c

    Lecture du fichier...
    Creation du code HTML...
    Code cree...
    Creation des en-tetes...
    Entrez le titre a afficher :
    ->File.c

    Enregistrement du code...
    Entrez l'adresse complete du fichier ou vous souhaitez enregistrer le code cree :
    ->/file.c.html

    Enregistrement du fichier /file.c.html...
    Fichier enregistre avec succes.
    On doit pouvoir factoriser du code, supprimer ces globales infâmes, traiter différemment C et C++ (se sont des langages différents) etc.
    Tant que ça fonctionne, que ça va vite, et que c'est à peu près propre ça me va.

    J'espère bien avoir retenu tout ce que tu m'as expliqué. Je n'étais pas habitué à cette façon de programmer et de présenter les choses. De tout façon c'est en faisant des erreurs que l'on apprend le plus

    PS: encore merci beaucoup beaucoup

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spootnik-Dev
    Au fait, je t'ai rajouté parmis les créateurs de ce petit programme. Enfin si tu n'as pas envie dis le.
    Je veux bien, mais je me réserve le droit d'améliorer le codage, ou alors tu me mets simplement en 'correcteur'.

    Je n'assume pas les 3000 portions de codes identiques (à un poil près...) ni la confusion C /C++...

    Le mot new ou class est valide en C, il est reservé en C++ etc.

    Au fait, ça veut dire quoi 'Intender' ? Si c'est 'indenteur', ben, c'est pas ça. Et si c'est un colorisateur ou un colorieur, il va falloir trouver un autre nom...

    Par exemple, CodeColorizer ...
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. lecture / écriture dans des fichiers text
    Par nadir CoCo dans le forum C++
    Réponses: 6
    Dernier message: 28/06/2012, 09h10
  2. lecture/écriture dans un fichier
    Par benkunz dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2007, 11h35
  3. probleme lecture ecriture dans des fichiers
    Par xman_genius dans le forum C
    Réponses: 9
    Dernier message: 16/01/2007, 19h50
  4. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  5. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

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