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.
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).cÿýèoÿýèmÿýèpÿýèlÿýèeÿýètÿýèeÿýèlÿýèyÿýèd.\n");
break;
}
break;
Mon code n'est peut-être pas très "propre"![]()
Voici ma méthode de lecture (la fonction strFromStrings() est décrite plus bas) :
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
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; }
Ma fonction writeToFile() renvoie NULL en cas d'erreur lors de l'é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; } }
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):
Pour info, il n'y a eu aucun bug de mémoire lorsque j'ai testé mon programme.
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; }
Merci à tous![]()
Partager