Je travaille actuellement sur ma bibliothèque de chaînes de caractères (enfin de nouveau du temps !!). Je suis sur une fonction qui coupe le texte en lignes distinctes en utilisant comme repères de découpage, les saut de ligne et a terme, le retour chariot. Chaque ligne se retrouve donc être une chaîne de caractères appartenant à un buffer C_Str_buffer (une liste chaînées d'objects C_Str).
Voici ma sortie:
Le problème se situe toujours sur les mêmes lignes. Pour le moment je teste que le caractère d'échappement \n car je sais qu"il n'y a que celui là dans mon code. Voici la fonction de traitement:
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 #include <stdio.h> #include <stdlib.h> @#include "c_str.h" @ @void cb (void * p_data, void * p_user_data) { (void)p_user_data; printf ("%s", C_Str_get ((C_Str *)p_data)); } int main (void) { C_Str * str = C_Str_new_from_file ("main.c"); C_Str_buffer * buff = C_Str_split_lines (str); if (str && buff) { C_Str_buffer_foreach(cb, (void*)buff, NULL); C_Str_buffer_destroy (&buff); C_Str_destroy (&str); } return EXIT_SUCCESS; }
Je ne vois franchement pas d'où viens le problème, il me faut surtout un oeil neuf
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 DECLSPEC C_Str_buffer * C_Str_split_lines (C_Str * const self) { C_Str_buffer * p_buf = NULL; if (self && self->sz_string) { char * p1 = self->sz_string; char * p2 = p1; p_buf = C_Str_buffer_new (); if (p_buf) { size_t size = 0; while (*p2 != '\0') { size++; if (*p2 == LF) { C_Str * p_new = C_Str_new_len (size + 1); if (p_new) { int i = 0; do { p_new->sz_string[i++] = *p1; } while (p1++ != p2); p_new->sz_string[size + 1] = '\0'; size = 0; C_Str_buffer_add(p_buf, p_new); } } p2++; } } } return p_buf; }
Partager