Bonjour, la fonction suivante renvoit un tableau contenant des chaînes 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
char **my_ereg ( const char *regex, const char *str )
{
    int         regcomp_options = 0;
    int         regexec_options = 0;
    regex_t     motif;
    int         error = 0;
 
    size_t      message_size = 0;
    char        *message = NULL;
 
    size_t      substr_count = 0;
    size_t      substr_size = 0;
    regmatch_t  *substr_match = NULL;
 
    char        *substr;
 
    char        **result;
 
    int i = 0;
 
    /* nothing to do if regular expression is empty */
    if ((regex == NULL) || (str == NULL))
        return NULL;
 
    /* Motif compilation */
    regcomp_options |= REG_EXTENDED;
 
    error = regcomp(&motif, regex, regcomp_options);
 
    /* Catch error */
    if (error != 0) {
        message_size = regerror(error, &motif, NULL, 0);
        message = malloc(message_size);
        regerror(error, &motif, message, message_size);
        error_printf(NON_FATAL, NULL, message);
        free(message), message = NULL;
        regfree(&motif);
        exit(EXIT_FAILURE);
    }
 
    /* Prepare sub-expressions */
    substr_count = motif.re_nsub + 1;
    substr_match = calloc(substr_count, sizeof(regmatch_t));
 
    /* Execute regular expression */
    error = regexec(&motif, str, substr_count, substr_match,
                    regexec_options);
 
    if (error != 0) {
        regfree(&motif);
        free(substr_match), substr_match = NULL;
        if (error == REG_NOMATCH)
            return NULL;
        else
            error_printf(FATAL, "regexec", NULL);
    }
 
    /* Allocating memory for results pointers */
    result = malloc(sizeof(*result) * (substr_count + 1));
 
    /* Parsing results */
    while (i < substr_count) {
        substr_size = substr_match[i].rm_eo
                    - substr_match[i].rm_so;
 
        *(result + i) = calloc( substr_size + 1,
                                sizeof(**result) * (substr_size + 1));
        *(result + i) = strncpy(*(result + i),
                         str + substr_match[i].rm_so,
                         substr_size);
 
        i++;
    }
 
    /* Last result is NULL */
    *(result + i) = NULL;
 
    free(substr_match), substr_match = NULL;
 
    regfree(&motif);
 
    return result;
} /* my_ereg() */
Est-ce que quelqu'un a une idée pour faire la même chose en passant le tableau de chaînes en arguments (et mettre void en retour de fonction pour l'instant) ?

Merci d'avance.