Richard Delorme wrote on 28/04/05 :Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Richard Delorme wrote on 28/04/05 :
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Richard Delorme wrote on 28/04/05 :Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Richard Delorme wrote on 28/04/05 :Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Plus ou moins les mêmes reproches que précédemment : ne vérifie pas
grand chose, lente (parcours 3 fois la chaine), longue, etc.
/* On cherche la place du caractere '/' */
char *p_sep = strchr (string, '');
/* On place tous les caracteres a gauche du '' dans n1 */
char n1[32];
*n1 = 0;
strncat (n1, string, (size_t) (p_sep - string));
Par exemple, que se passe-t-il si string ne contient pas de '' ?
Richard Delorme wrote on 28/04/05 :
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Plus ou moins les mêmes reproches que précédemment : ne vérifie pas
grand chose, lente (parcours 3 fois la chaine), longue, etc.
/* On cherche la place du caractere '/' */
char *p_sep = strchr (string, '\');
/* On place tous les caracteres a gauche du '' dans n1 */
char n1[32];
*n1 = 0;
strncat (n1, string, (size_t) (p_sep - string));
Par exemple, que se passe-t-il si string ne contient pas de '' ?
Richard Delorme wrote on 28/04/05 :Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour
le sscanf), etc.
http://www.developpez.net/forums/viewtopic.php?t31877
pas génial non plus... sauf si c'est pour montrer que sscanf est mieux.
J'ai pas dit que c'était bien, mieux ou quoi. Tu voulais une solution,
je t'en donne une toute fraîche. Si tu trouves qu'elle n'est pas bonne,
il falloir être un moins vague que "pas génial non plus"
Plus ou moins les mêmes reproches que précédemment : ne vérifie pas
grand chose, lente (parcours 3 fois la chaine), longue, etc.
/* On cherche la place du caractere '/' */
char *p_sep = strchr (string, '');
/* On place tous les caracteres a gauche du '' dans n1 */
char n1[32];
*n1 = 0;
strncat (n1, string, (size_t) (p_sep - string));
Par exemple, que se passe-t-il si string ne contient pas de '' ?
La solidité, la lisibilité, la maintenabilité, la réusabilité
tiennent sans doute en partie au langage
pas du tout (enfin, un peu quand même, sans pointeurs de fonctions, je
suis perdu, ou je passe en assembleur !)
mais surtout au design et le C permet
de faire des choses claires si on veut faire un peu d'effort.
Absolument. Ca ne demande qu'un peu de méthode, de rigueur, et, soit
beaucoup d'expérience pour les autodidactes comme moi, soit une bonne
formation. D'après ce que je vois, la formation n'est pas bonne
(enfin, ici, et sur d'autres forums, on ne voit que les problèmes...).
Sais pas. On peut tout construire en C, y compris des fonctions de
très haut niveau... Certains ont franchi le pas et ont bati des
interpréteurs objets avec le C (Python, Ruby etc.)
Sinon, GTK est un bon exemple de ce que peut faire une bonnne
bibliothèque écrite en C pour construire des programme GUI (portabkes
en plus, ce qui ne gâche rien)...
Ok, Python et Ruby savent aussi faire ça...
La solidité, la lisibilité, la maintenabilité, la réusabilité
tiennent sans doute en partie au langage
pas du tout (enfin, un peu quand même, sans pointeurs de fonctions, je
suis perdu, ou je passe en assembleur !)
mais surtout au design et le C permet
de faire des choses claires si on veut faire un peu d'effort.
Absolument. Ca ne demande qu'un peu de méthode, de rigueur, et, soit
beaucoup d'expérience pour les autodidactes comme moi, soit une bonne
formation. D'après ce que je vois, la formation n'est pas bonne
(enfin, ici, et sur d'autres forums, on ne voit que les problèmes...).
Sais pas. On peut tout construire en C, y compris des fonctions de
très haut niveau... Certains ont franchi le pas et ont bati des
interpréteurs objets avec le C (Python, Ruby etc.)
Sinon, GTK est un bon exemple de ce que peut faire une bonnne
bibliothèque écrite en C pour construire des programme GUI (portabkes
en plus, ce qui ne gâche rien)...
Ok, Python et Ruby savent aussi faire ça...
La solidité, la lisibilité, la maintenabilité, la réusabilité
tiennent sans doute en partie au langage
pas du tout (enfin, un peu quand même, sans pointeurs de fonctions, je
suis perdu, ou je passe en assembleur !)
mais surtout au design et le C permet
de faire des choses claires si on veut faire un peu d'effort.
Absolument. Ca ne demande qu'un peu de méthode, de rigueur, et, soit
beaucoup d'expérience pour les autodidactes comme moi, soit une bonne
formation. D'après ce que je vois, la formation n'est pas bonne
(enfin, ici, et sur d'autres forums, on ne voit que les problèmes...).
Sais pas. On peut tout construire en C, y compris des fonctions de
très haut niveau... Certains ont franchi le pas et ont bati des
interpréteurs objets avec le C (Python, Ruby etc.)
Sinon, GTK est un bon exemple de ce que peut faire une bonnne
bibliothèque écrite en C pour construire des programme GUI (portabkes
en plus, ce qui ne gâche rien)...
Ok, Python et Ruby savent aussi faire ça...
Harpo wrote on 27/04/05 :Il faut se dire qu'il faut se débrouiller avec, ce sont des fonctions
que l'on doit connaître lorsqu'on les utilise souvent, j'utilise plus
facilement memcpy lorsque je le peux.
memcpy() ne met pas de 0 final. strncat() le fait. Le jour où j'ai
découvert ça (en parcourant c.l.c, i y a 4 ou 5 ans), ma vie a changé !
Harpo wrote on 27/04/05 :
Il faut se dire qu'il faut se débrouiller avec, ce sont des fonctions
que l'on doit connaître lorsqu'on les utilise souvent, j'utilise plus
facilement memcpy lorsque je le peux.
memcpy() ne met pas de 0 final. strncat() le fait. Le jour où j'ai
découvert ça (en parcourant c.l.c, i y a 4 ou 5 ans), ma vie a changé !
Harpo wrote on 27/04/05 :Il faut se dire qu'il faut se débrouiller avec, ce sont des fonctions
que l'on doit connaître lorsqu'on les utilise souvent, j'utilise plus
facilement memcpy lorsque je le peux.
memcpy() ne met pas de 0 final. strncat() le fait. Le jour où j'ai
découvert ça (en parcourant c.l.c, i y a 4 ou 5 ans), ma vie a changé !
Charlie Gordon wrote:
Je ne vois pas pourquoi on utiliserait strtok() quand strtok_r() est
disponble.
Ok, mais très généralement on s'en fout quand il s'agit de mémoire
allouée dans le tas sur lequel il n'y a pas de problème de concurrence.
C'est typiquement un faux problème, il suffit de connaître le
comportement de la fonction. Faire un malloc_r() serait plus séieux.Quant à strncpy() et strncat() : relisez la spec et vous
verrez qu'elles ne font
pas ce que la plupart des programmeurs pensent savoir ou comprendre.
Il y a la doc, s'ils ne la comprennent parfois un peu de travers comme
moi ce n'est pas un problème, comme ils font des tests exhaustifs ils
finissent par comprendre ce qu'ils font.
Charlie Gordon wrote:
Je ne vois pas pourquoi on utiliserait strtok() quand strtok_r() est
disponble.
Ok, mais très généralement on s'en fout quand il s'agit de mémoire
allouée dans le tas sur lequel il n'y a pas de problème de concurrence.
C'est typiquement un faux problème, il suffit de connaître le
comportement de la fonction. Faire un malloc_r() serait plus séieux.
Quant à strncpy() et strncat() : relisez la spec et vous
verrez qu'elles ne font
pas ce que la plupart des programmeurs pensent savoir ou comprendre.
Il y a la doc, s'ils ne la comprennent parfois un peu de travers comme
moi ce n'est pas un problème, comme ils font des tests exhaustifs ils
finissent par comprendre ce qu'ils font.
Charlie Gordon wrote:
Je ne vois pas pourquoi on utiliserait strtok() quand strtok_r() est
disponble.
Ok, mais très généralement on s'en fout quand il s'agit de mémoire
allouée dans le tas sur lequel il n'y a pas de problème de concurrence.
C'est typiquement un faux problème, il suffit de connaître le
comportement de la fonction. Faire un malloc_r() serait plus séieux.Quant à strncpy() et strncat() : relisez la spec et vous
verrez qu'elles ne font
pas ce que la plupart des programmeurs pensent savoir ou comprendre.
Il y a la doc, s'ils ne la comprennent parfois un peu de travers comme
moi ce n'est pas un problème, comme ils font des tests exhaustifs ils
finissent par comprendre ce qu'ils font.
Charlie Gordon wrote on 27/04/05 :Essayez avec vos propres projets, ou ceux dont vous avez les sources sous la
main, c'est rare que strncpy ou strncat n'y soit pas utilisé de façon
erronée.
Je te laisse regarder...
http://mapage.noos.fr/emdel/clib.htm
Charlie Gordon wrote on 27/04/05 :
Essayez avec vos propres projets, ou ceux dont vous avez les sources sous la
main, c'est rare que strncpy ou strncat n'y soit pas utilisé de façon
erronée.
Je te laisse regarder...
http://mapage.noos.fr/emdel/clib.htm
Charlie Gordon wrote on 27/04/05 :Essayez avec vos propres projets, ou ceux dont vous avez les sources sous la
main, c'est rare que strncpy ou strncat n'y soit pas utilisé de façon
erronée.
Je te laisse regarder...
http://mapage.noos.fr/emdel/clib.htm
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux
qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux
qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux
qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
"Richard Delorme" wrote in message
news:42700131$0$26067$Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour le sscanf), etc.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que
d'utiliser strtok()
qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu
et une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est
jamais implémenté en ligne et doit avec le format approprié faire
beaucoup plus de tests pour chaque caractère de msg.
"Richard Delorme" <abulmo@nospam.fr> wrote in message
news:42700131$0$26067$7a628cd7@news.club-internet.fr...
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour le sscanf), etc.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que
d'utiliser strtok()
qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu
et une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est
jamais implémenté en ligne et doit avec le format approprié faire
beaucoup plus de tests pour chaque caractère de msg.
"Richard Delorme" wrote in message
news:42700131$0$26067$Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1
pour le sscanf), etc.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que
d'utiliser strtok()
qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu
et une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est
jamais implémenté en ligne et doit avec le format approprié faire
beaucoup plus de tests pour chaque caractère de msg.
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
Exact, je ne l'ai pas posté quand j'ai vu que quelqu'un d'autre l'avait déjà
fait.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que d'utiliser
strtok() qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu et
une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est jamais
implémenté en ligne et doit avec le format approprié faire beaucoup plus de
tests pour chaque caractère de msg.
D'ailleurs elle ne parcourt deux fois que la moitié de la chaine, et on peut
facilement la modifier pour qu'elle laisse msg inchangé :
char *p=strchr(msg,':');
if (p) {
memcpy(var1, msg, p - msg);
var1[p - msg] = ' ';
strcpy(var2, p + 1);
}
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
Exact, je ne l'ai pas posté quand j'ai vu que quelqu'un d'autre l'avait déjà
fait.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que d'utiliser
strtok() qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu et
une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est jamais
implémenté en ligne et doit avec le format approprié faire beaucoup plus de
tests pour chaque caractère de msg.
D'ailleurs elle ne parcourt deux fois que la moitié de la chaine, et on peut
facilement la modifier pour qu'elle laisse msg inchangé :
char *p=strchr(msg,':');
if (p) {
memcpy(var1, msg, p - msg);
var1[p - msg] = ' ';
strcpy(var2, p + 1);
}
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
Exact, je ne l'ai pas posté quand j'ai vu que quelqu'un d'autre l'avait déjà
fait.
Je ne vois pas en quoi la solution de Yves Roman est plus lente que d'utiliser
strtok() qui écrit AUSSI dans la chaine de départ, qui ce est souvent méconnu et
une raison supplémentaire de s'en méfier.
Elle n'est sans doute pas plus lente non plus que scanf qui n'est jamais
implémenté en ligne et doit avec le format approprié faire beaucoup plus de
tests pour chaque caractère de msg.
D'ailleurs elle ne parcourt deux fois que la moitié de la chaine, et on peut
facilement la modifier pour qu'elle laisse msg inchangé :
char *p=strchr(msg,':');
if (p) {
memcpy(var1, msg, p - msg);
var1[p - msg] = ' ';
strcpy(var2, p + 1);
}
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
C'est exact
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
C'est exact
Tu as raison, mais il faut être pragmatique : quand un OP demande comment
utiliser scanf() pour faire un split() de chaines, je ne suis pas de ceux qui
proposent le format %[^:] , je préconise d'utiliser strchr() et d'éviter
scanf().
Où est cette solution qui préconise strchr ?
Celle que j'ai vu, est signé Yves Roman, et n'est pas complètement
satisfaisante : écrit dans la chaine de départ, ne vérifie pas grand
chose, lente (parcours 2 fois la chaine), longue (7 lignes contre 1 pour
le sscanf), etc.
C'est exact