/* opération diverse sur les tables de chaine alloué dynamiquement */ #include #include #include #include #include "etc.h" #if 0 /* libère les éléments d'une table de chaine Généralement, chaque élément a été alloué par strdup() */ export void tbstr_free (char *tb[], int nbelm) { int i; for (i=0; i maxlen) maxlen = len; } return (maxlen); } /* Sépare une chaine en une table de chaine Utilisé tbstr_free pour libérer tb[] */ export int tbstr_str2tb( const char *str, /* Chaine à séparer */ char mark, /* Séparateur des sous-chaines */ /* Remplacé par '\0' */ char *tb[]) /* recrevra les sous-chaines avec strdup() */ { int nb = 0; char *buf = strdup (str); char *pt = buf; assert (buf!=NULL); while (*pt != '\0'){ char *pt2 = strchr(pt,mark); if (pt2 != NULL){ *pt2++ = '\0'; }else{ pt2 = ""; /* force terminaison la prochaine fois */ } tb[nb++] = strdup(pt); pt = pt2; } free (buf); return (nb); } /* Copie les chaines d'une table dans une chaine en concantènant Utilisé tbstr_free pour libérer tb[] Retourne la longueur de la chaine */ export int tbstr_2str( const char *tbstr[],/* recrevra les sous-chaines avec strdup() */ int nbstr, /* nombre de chaine */ char mark, /* Séparateur qui sera placé entre les chaines */ /* Si '\0', les chaines seront collés */ char *str) /* Destination (doit être de longueur suffisante) */ { char *debstr = str; int i; for (i=0; i