J'ai écris une fonction qui me permet de lire un fichier et d'en retourner le contenu dans une chaines de caractères.

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
static char *pReadFile(const char *filename)
{
	char *buffer = NULL;
	FILE *fSrc = fopen(filename, "r");
	unsigned int	poc=0;
 
	if (fSrc != NULL)
	{
		fseek(fSrc, 0, SEEK_END);       // aller en fin
		unsigned long size = ftell(fSrc);             // lire la taille
		/* ne pas depasser ce que peut contenir un size_t ... */
		if (size < (size_t) - 1)
		{
			rewind(fSrc);    // rétablir la position
 
			/* allouer le bloc + une place pour le 0 */
			buffer = malloc(size + 1);
			if (buffer != NULL)
			{
				int ok = 0;
				/* lire le ficher (in one glup...) */
				poc = fread(buffer, 1,size, fSrc);
 
				if (ferror(fSrc)) {
					Log(3, "FILE_GET", "Erreur de lecture du fichier '%s' ", filename);
					fclose(fSrc);
				}
 
				Log(1, "FILE_GET", "File siez : '%d' (octets)", poc);		
 
				if (poc == size)
				{
					/* ajouter le 0 final */
					buffer[size] = 0;
					ok = 1;
				}
 
				if (!ok)
				{
					Log(3, "FILE_GET", "Erreur sur taille de fichier attendu : %d -> %d", poc, size);
					/* en cas d'erreur de lecture, liberer le bloc ... */
					free (buffer), buffer = NULL;
				}
			}
		}
		fclose(fSrc), fSrc = NULL;
	}
	else
	{
		Log(3, "FILE_GET", "Impossible d'ouvrir le fichier '%s' ", filename);
	}
 
	return buffer;
}
La fonction tourne bien, sauf sur certains fichiers, qui contiennent des octets "vide" ('0'), équivalent au "end of file".

Exemple de fichier (affiché en hexadécimal):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
00 52 F1 00 F8 F7 F3 F0 F0 F8 F8 F3 F0 F0 F0 F0
F5 F1 F5 F5 F8 F0 F6 F0 F7 F2 F4 F0 F0 F0 F1 F0
F2 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0
F0 F0 F1 F4 F4 F8 F0 F3 F0 F6 F0 F7 F2 F5 F8 F7
F2 F1 F1 F0 F6 F0 F7 F2 F4 F2 F2 F3 F4 F0 F0 F0
F0 F0 00 FD F3 F0 F0 F1 F1 5F E0 00 00 F4 F4 F8
F0 F3 F0 F6 F0 F7 F2 F5 F8 F7 F2 F1 F1 F3 F1 F1
F3 F1 F1 F1 F8 F7 F3 F9 F0 F1 F3 F7 F4 F6 F1 F1
Je suis newbie en C.

Comment lire ce genre de fichier, comprennant des octets '0' ?