strsep - Extraction de séquence d'une chaîne
Bibliothèque C standard (
libc,
-lc)
#include <string.h>
char *strsep(char **restrict stringp, const char *restrict delim);
strsep() :
Depuis la glibc 2.19 :
_DEFAULT_SOURCE
glibc 2.19 et antérieures :
_BSD_SOURCE
Si
*stringp est NULL, la fonction
strsep() renvoie NULL et ne fait
rien d'autre. Dans le cas contraire, cette fonction recherche la
première séquence (token) de la chaîne
*stringp
qui est délimitée par l'un des octets de la chaîne
delim. La séquence renvoyée est terminée en
écrasant le séparateur avec un octet NULL
(« \0 ») et
*stringp est mis à jour
pour pointer après la séquence. Dans le cas où aucun
séparateur n'est trouvé, la séquence extraite est
constituée de toute la chaîne
*stringp, et
*stringp vaut NULL.
La fonction
strsep() renvoie un pointeur sur la séquence,
c'est-à-dire la valeur originelle de
*stringp.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
strsep() |
Sécurité des threads |
MT-Safe |
4.4BSD.
La fonction
strsep() a été introduite en remplacement de
strtok(3), qui ne peut pas traiter les champs vides. Néanmoins,
strtok(3) est conforme à C99 et est donc plus portable.
Faites attention quand vous utilisez cette fonction. Si vous l'utilisez, prenez
note des informations suivantes :
- •
- Cette fonction modifie son premier argument.
- •
- Cette fonction ne peut pas être utilisée avec
des chaînes constantes.
- •
- L’identité du caractère
délimiteur est perdue.
Le programme ci-dessous est un portage d'un programme trouvé dans
strtok(3), qui néanmoins n'adandonne pas délimiteurs
multiples ou de séquences vides :
$ ./a.out 'a/bbb///cc;xxx:yyy:' ':;' '/'
1: a/bbb///cc
--> a
--> bbb
-->
-->
--> cc
2: xxx
--> xxx
3: yyy
--> yyy
4:
-->
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
char *token, *subtoken;
if (argc != 4) {
fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (unsigned int j = 1; (token = strsep(&argv[1], argv[2])); j++) {
printf("%u: %s\n", j, token);
while ((subtoken = strsep(&token, argv[3])))
printf("\t --> %s\n", subtoken);
}
exit(EXIT_SUCCESS);
}
memchr(3),
strchr(3),
string(3),
strpbrk(3),
strspn(3),
strstr(3),
strtok(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Frédéric Hantrais <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]