Problème de restitution de texte
:salut:
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:
Code:
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;
} |
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:
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;
} |
Je ne vois franchement pas d'où viens le problème, il me faut surtout un oeil neuf ;)
:merci: