dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
tu veux dire « string », j'imagine
void* oldPos = &result;
// init de la recherche
result = strchr(string, '=');
while (result != NULL && result != ' ')
*result
{
// Affiche ce qui se trouve entre le précédent pointeur et le pointeur
renvoyé cette fois-ci
printf("%in", result-oldPos);
oldPos = &result;
pas de « & »
et là mon compilo gcc me dit que j'ai pas le droit de faire la
différence entre mes 2 pointeurs :(
dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
tu veux dire « string », j'imagine
void* oldPos = &result;
// init de la recherche
result = strchr(string, '=');
while (result != NULL && result != ' ')
*result
{
// Affiche ce qui se trouve entre le précédent pointeur et le pointeur
renvoyé cette fois-ci
printf("%in", result-oldPos);
oldPos = &result;
pas de « & »
et là mon compilo gcc me dit que j'ai pas le droit de faire la
différence entre mes 2 pointeurs :(
dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
tu veux dire « string », j'imagine
void* oldPos = &result;
// init de la recherche
result = strchr(string, '=');
while (result != NULL && result != ' ')
*result
{
// Affiche ce qui se trouve entre le précédent pointeur et le pointeur
renvoyé cette fois-ci
printf("%in", result-oldPos);
oldPos = &result;
pas de « & »
et là mon compilo gcc me dit que j'ai pas le droit de faire la
différence entre mes 2 pointeurs :(
bonsoir,
dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
je procède par étapes mais je galère pas mal...
La première étape qui me pose pb est de récupérer ce qu'il y avant le
séparateur. (je sais, je suis pas rendu pour faire mon split :)... )
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
strcpy(result, string);
bonsoir,
dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
je procède par étapes mais je galère pas mal...
La première étape qui me pose pb est de récupérer ce qu'il y avant le
séparateur. (je sais, je suis pas rendu pour faire mon split :)... )
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
strcpy(result, string);
bonsoir,
dans le cadre de mon apprentissage, j'essaie d'écrire la fonction
split(string, separateur);
je procède par étapes mais je galère pas mal...
La première étape qui me pose pb est de récupérer ce qu'il y avant le
séparateur. (je sais, je suis pas rendu pour faire mon split :)... )
char* string = "la=chaine=a=separer";
// une copie de travail
char* result = malloc(strlen(result));
strcpy(result, string);
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
je compte le nbre d'occurence de mon separateurs et j'alloue un
tableau de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent
et prend le bout
de chaine entre les 2, je cree un pointeur que je stocke dans mon
tableau et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je
renvoie, soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
je compte le nbre d'occurence de mon separateurs et j'alloue un
tableau de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent
et prend le bout
de chaine entre les 2, je cree un pointeur que je stocke dans mon
tableau et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je
renvoie, soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
je compte le nbre d'occurence de mon separateurs et j'alloue un
tableau de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent
et prend le bout
de chaine entre les 2, je cree un pointeur que je stocke dans mon
tableau et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je
renvoie, soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
Une autre piste mais je ne sais pas ce qu'elle vaut :
je compte le nbre d'occurence de mon separateurs et j'alloue un tableau
de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent et prend le bout de
chaine entre les 2, je cree un pointeur que je stocke dans mon tableau
et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je renvoie,
soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
Dans tous les cas, merci pour votre aide !
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
Une autre piste mais je ne sais pas ce qu'elle vaut :
je compte le nbre d'occurence de mon separateurs et j'alloue un tableau
de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent et prend le bout de
chaine entre les 2, je cree un pointeur que je stocke dans mon tableau
et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je renvoie,
soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
Dans tous les cas, merci pour votre aide !
La macro ne sert qu'à faire renvoyer EOF, qui est le retour d'erreur de
puts(), si on envoie NULL.
Remarquez que le séparateur n'est pas const char mais const char*. Cette
chaîne n'est pas un pattern, mais une liste de caractères, qui seront
mises en OU pour la recherche. Voir le man de strtok().
J'avais commencé à réfléchir à strtok effectivement mais sans bcp de succès.
Une autre piste mais je ne sais pas ce qu'elle vaut :
je compte le nbre d'occurence de mon separateurs et j'alloue un tableau
de pointeurs.
je parse ma chaine caractère par caractère
si c'est un sep, alors je recule jusqu'au précedent et prend le bout de
chaine entre les 2, je cree un pointeur que je stocke dans mon tableau
et j'incrémente mon pointeur de tableau de pointeur.
Autre piste: une liste chainée des bouts de chaine que soit je renvoie,
soit je transforme en tableau
Votre avis ?
En attendant, je vais recreuser strtok.
Dans tous les cas, merci pour votre aide !
Dans la même veine, il faut connaitre mais NE PAS utiliser gets() ni
strncpy().
Dans la même veine, il faut connaitre mais NE PAS utiliser gets() ni
strncpy().
Dans la même veine, il faut connaitre mais NE PAS utiliser gets() ni
strncpy().
"Denis Leger" wrote in message
news:
Le Thu, 6 Jul 2006 10:00:33 +0200Dans la même veine, il faut connaitre mais NE PAS utiliser gets()
ni > strncpy().
Pourquoi ne pas utiliser strncpy() ?
ce sujet a été maintes fois débattu sur ce forum, voir l'article de
Todd Miller :
http://www.courtesan.com/todd/papers/strlcpy.html
Tu peux faire le test : lis en détail le manuel pour strncpy, tu sera
surpris que cette fonction ne fait pas ce que 99% des programmeurs
intuitent quand ils l'utilisent ou en voient une utilisation dans du
code. En conséquence, l'énorme majorité des utilisations de cette
fonction contiennent des bugs plus ou moins graves.
"Denis Leger" <denis.leger@laposte.net> wrote in message
news:20060706192256.773ff15f.denis.leger@laposte.net...
Le Thu, 6 Jul 2006 10:00:33 +0200
Dans la même veine, il faut connaitre mais NE PAS utiliser gets()
ni > strncpy().
Pourquoi ne pas utiliser strncpy() ?
ce sujet a été maintes fois débattu sur ce forum, voir l'article de
Todd Miller :
http://www.courtesan.com/todd/papers/strlcpy.html
Tu peux faire le test : lis en détail le manuel pour strncpy, tu sera
surpris que cette fonction ne fait pas ce que 99% des programmeurs
intuitent quand ils l'utilisent ou en voient une utilisation dans du
code. En conséquence, l'énorme majorité des utilisations de cette
fonction contiennent des bugs plus ou moins graves.
"Denis Leger" wrote in message
news:
Le Thu, 6 Jul 2006 10:00:33 +0200Dans la même veine, il faut connaitre mais NE PAS utiliser gets()
ni > strncpy().
Pourquoi ne pas utiliser strncpy() ?
ce sujet a été maintes fois débattu sur ce forum, voir l'article de
Todd Miller :
http://www.courtesan.com/todd/papers/strlcpy.html
Tu peux faire le test : lis en détail le manuel pour strncpy, tu sera
surpris que cette fonction ne fait pas ce que 99% des programmeurs
intuitent quand ils l'utilisent ou en voient une utilisation dans du
code. En conséquence, l'énorme majorité des utilisations de cette
fonction contiennent des bugs plus ou moins graves.
Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir recours
à une périphrase avec memset et memcpy.
Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir recours
à une périphrase avec memset et memcpy.
Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir recours
à une périphrase avec memset et memcpy.
In article <44aee8d7$0$9932$,
Charlie Gordon wrote:Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir
recours
à une périphrase avec memset et memcpy.
le seul cas ou presque ou strncpy est justifie, c'est pour remplir des
entrees d'utmp et autres machins dans le meme genre...
et encore, ca donne du code pas toujours tres clair malgre tout.
In article <44aee8d7$0$9932$636a55ce@news.free.fr>,
Charlie Gordon <news@chqrlie.org> wrote:
Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir
recours
à une périphrase avec memset et memcpy.
le seul cas ou presque ou strncpy est justifie, c'est pour remplir des
entrees d'utmp et autres machins dans le meme genre...
et encore, ca donne du code pas toujours tres clair malgre tout.
In article <44aee8d7$0$9932$,
Charlie Gordon wrote:Même en prenant ces précautions, c'est une mauvaise idée : d'autres que toi
liront ce code et penseront naivement que cette fonction fait ce qu'ils
imaginent. Il est tellement rare que strncpy soit la bonne solution que même
dans ces cas improbables, il faudrait mieux expliquer le besoin et avoir
recours
à une périphrase avec memset et memcpy.
le seul cas ou presque ou strncpy est justifie, c'est pour remplir des
entrees d'utmp et autres machins dans le meme genre...
et encore, ca donne du code pas toujours tres clair malgre tout.