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