Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Bref strchr() est bien plus clair, et Ô combien plus rapide :
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL)
var2++;
Marche pas... (1 partout pour les exemples déficients ;-)
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
Bref strchr() est bien plus clair, et Ô combien plus rapide :
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL)
var2++;
Marche pas... (1 partout pour les exemples déficients ;-)
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
Bref strchr() est bien plus clair, et Ô combien plus rapide :
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL)
var2++;
Marche pas... (1 partout pour les exemples déficients ;-)
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
Bref, à part être plus long que scanf, je ne vois pas ce qu'apporte
d'utiliser strchr.
C'est plus précis : le cas ou le séparateur est absent est facile à
détecter.
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
Bref, à part être plus long que scanf, je ne vois pas ce qu'apporte
d'utiliser strchr.
C'est plus précis : le cas ou le séparateur est absent est facile à
détecter.
char *var1, *var2;
var1 = msg;
if ((var2 = strchr(msg, ':')) != NULL) {
*var2 = ' ';
var2++;
}
Bref, à part être plus long que scanf, je ne vois pas ce qu'apporte
d'utiliser strchr.
C'est plus précis : le cas ou le séparateur est absent est facile à
détecter.
Harpo wrote on 28/04/05 :Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Personne n'a dit que ça ne servait à rien. Par contre ils sont
insuffisants. Je ne connais pas de moyen automatique de detecter un
UB.
Harpo wrote on 28/04/05 :
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Personne n'a dit que ça ne servait à rien. Par contre ils sont
insuffisants. Je ne connais pas de moyen automatique de detecter un
UB.
Harpo wrote on 28/04/05 :Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Personne n'a dit que ça ne servait à rien. Par contre ils sont
insuffisants. Je ne connais pas de moyen automatique de detecter un
UB.
(supersedes )
Charlie Gordon wrote on 28/04/05 :Tu utilises strncat pour réaliser en fait une copie avec limitation de
taille, c'est un peu surprenant pour le lecteur non averti, mais ce n'est
pas un bug, en revanche ton sprintf causera un debordement de tableau
Utilises un tampon intermédiaire ou snprintf().
Meme chose pour FIC_str_time, et plus généralement partout ou tu utilises
sprintf.
Je vois que tu n'as pas vu à quoi servaient
LIM_PTR (sdate, size);
et
CHK_PTR (sdate, size);
Bien sûr, le mal est fait et en théorie, je suis déjà satellisé, mais
crois ce genre de test (en mode débug) ça fait le ménage!
Je préfèrerais utiliser snprintf(), mais rien de tel en C90. alors on
fait ce qu'on peut...
(supersedes <mn.e4807d54055ba640.15512@YOURBRAnoos.fr>)
Charlie Gordon wrote on 28/04/05 :
Tu utilises strncat pour réaliser en fait une copie avec limitation de
taille, c'est un peu surprenant pour le lecteur non averti, mais ce n'est
pas un bug, en revanche ton sprintf causera un debordement de tableau
Utilises un tampon intermédiaire ou snprintf().
Meme chose pour FIC_str_time, et plus généralement partout ou tu utilises
sprintf.
Je vois que tu n'as pas vu à quoi servaient
LIM_PTR (sdate, size);
et
CHK_PTR (sdate, size);
Bien sûr, le mal est fait et en théorie, je suis déjà satellisé, mais
crois ce genre de test (en mode débug) ça fait le ménage!
Je préfèrerais utiliser snprintf(), mais rien de tel en C90. alors on
fait ce qu'on peut...
(supersedes )
Charlie Gordon wrote on 28/04/05 :Tu utilises strncat pour réaliser en fait une copie avec limitation de
taille, c'est un peu surprenant pour le lecteur non averti, mais ce n'est
pas un bug, en revanche ton sprintf causera un debordement de tableau
Utilises un tampon intermédiaire ou snprintf().
Meme chose pour FIC_str_time, et plus généralement partout ou tu utilises
sprintf.
Je vois que tu n'as pas vu à quoi servaient
LIM_PTR (sdate, size);
et
CHK_PTR (sdate, size);
Bien sûr, le mal est fait et en théorie, je suis déjà satellisé, mais
crois ce genre de test (en mode débug) ça fait le ménage!
Je préfèrerais utiliser snprintf(), mais rien de tel en C90. alors on
fait ce qu'on peut...
"Emmanuel Delahaye" wrote in message
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test
d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa
conversion de dates :
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
"Emmanuel Delahaye" <emdel@YOURBRAnoos.fr> wrote in message
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test
d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa
conversion de dates :
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
"Emmanuel Delahaye" wrote in message
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test
d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa
conversion de dates :
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Charlie Gordon wrote:C'est une plaisanterie !
Non, il y a la doc. La première chose à faire est de lire cette foutue
doc.
Et de la lire *soigneusement*. Mais même en faisant cela on n'échappe
pas à des erreurs d'interprétation toujours possibles et quand on l'a
comprise on n'échappe pas à des erreurs de codage et autres,
Il y a aussi la possibilité que la doc ne corresponde pas à ce que fait
le programme, soit c'est du à un bug du programme soit à un bug de
documentation. Ce monde est plein de bugs partout.
Qu'on laisse jouer les bambins avec logo ou java, c'est pas bien
grave. Mais s'ils sont comme je l'imagine consultants en logiciel
embarqué sous-traitants de l'industrie, ça revient à laisser jouer les
enfants dans une salle d'opération
avec les instruments chirurgicaux : gare aux dégats. Les tests
exhaustifs, quelle fumisterie!
"tests exhaustifs" est une vue de l'esprit mais on peut s'en approcher,
il me semble au contraire nécessaire d'en approcher les limites et
d'avoir des solutions de repli lorsqu'on commet des bugs.
Pour reprendre ta comparaison, on commence à vraiment découper dans la
bidoche lorsque le programme est livré. C'est avant cela qu'il faut
veiller à ne pas faire de dégâts au moment réel.
Dans le matériel embarqué, j'imagine qu'on embauche pas des petits
génies de l'info qui ont réussi un 'hello world' amélioré avec des
couleurs mais plutôt des gens rigoureux et un peu intransigeants comme
Emdel. Tout se teste.
De plus, dans l'informatique embarquée il y a une différence entre le
réglage du débit de l'injection du carbu d'un motoculteur et la
conduite d'un TGV.
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Charlie Gordon wrote:
C'est une plaisanterie !
Non, il y a la doc. La première chose à faire est de lire cette foutue
doc.
Et de la lire *soigneusement*. Mais même en faisant cela on n'échappe
pas à des erreurs d'interprétation toujours possibles et quand on l'a
comprise on n'échappe pas à des erreurs de codage et autres,
Il y a aussi la possibilité que la doc ne corresponde pas à ce que fait
le programme, soit c'est du à un bug du programme soit à un bug de
documentation. Ce monde est plein de bugs partout.
Qu'on laisse jouer les bambins avec logo ou java, c'est pas bien
grave. Mais s'ils sont comme je l'imagine consultants en logiciel
embarqué sous-traitants de l'industrie, ça revient à laisser jouer les
enfants dans une salle d'opération
avec les instruments chirurgicaux : gare aux dégats. Les tests
exhaustifs, quelle fumisterie!
"tests exhaustifs" est une vue de l'esprit mais on peut s'en approcher,
il me semble au contraire nécessaire d'en approcher les limites et
d'avoir des solutions de repli lorsqu'on commet des bugs.
Pour reprendre ta comparaison, on commence à vraiment découper dans la
bidoche lorsque le programme est livré. C'est avant cela qu'il faut
veiller à ne pas faire de dégâts au moment réel.
Dans le matériel embarqué, j'imagine qu'on embauche pas des petits
génies de l'info qui ont réussi un 'hello world' amélioré avec des
couleurs mais plutôt des gens rigoureux et un peu intransigeants comme
Emdel. Tout se teste.
De plus, dans l'informatique embarquée il y a une différence entre le
réglage du débit de l'injection du carbu d'un motoculteur et la
conduite d'un TGV.
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Charlie Gordon wrote:C'est une plaisanterie !
Non, il y a la doc. La première chose à faire est de lire cette foutue
doc.
Et de la lire *soigneusement*. Mais même en faisant cela on n'échappe
pas à des erreurs d'interprétation toujours possibles et quand on l'a
comprise on n'échappe pas à des erreurs de codage et autres,
Il y a aussi la possibilité que la doc ne corresponde pas à ce que fait
le programme, soit c'est du à un bug du programme soit à un bug de
documentation. Ce monde est plein de bugs partout.
Qu'on laisse jouer les bambins avec logo ou java, c'est pas bien
grave. Mais s'ils sont comme je l'imagine consultants en logiciel
embarqué sous-traitants de l'industrie, ça revient à laisser jouer les
enfants dans une salle d'opération
avec les instruments chirurgicaux : gare aux dégats. Les tests
exhaustifs, quelle fumisterie!
"tests exhaustifs" est une vue de l'esprit mais on peut s'en approcher,
il me semble au contraire nécessaire d'en approcher les limites et
d'avoir des solutions de repli lorsqu'on commet des bugs.
Pour reprendre ta comparaison, on commence à vraiment découper dans la
bidoche lorsque le programme est livré. C'est avant cela qu'il faut
veiller à ne pas faire de dégâts au moment réel.
Dans le matériel embarqué, j'imagine qu'on embauche pas des petits
génies de l'info qui ont réussi un 'hello world' amélioré avec des
couleurs mais plutôt des gens rigoureux et un peu intransigeants comme
Emdel. Tout se teste.
De plus, dans l'informatique embarquée il y a une différence entre le
réglage du débit de l'injection du carbu d'un motoculteur et la
conduite d'un TGV.
Si les tests ne servaient à rien, on mettrait directement en fonction
sur un TGV les programmes dès qu'ils sont compilés, mais il faudra me
payer cher pour que je prenne un ticket.
Charlie Gordon wrote:"Emmanuel Delahaye" wrote in message
[coupé]
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait, j'ai
bon ?#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Charlie Gordon wrote:
"Emmanuel Delahaye" <emdel@YOURBRAnoos.fr> wrote in message
[coupé]
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait, j'ai
bon ?
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Charlie Gordon wrote:"Emmanuel Delahaye" wrote in message
[coupé]
PS: pour les courageux qui lisent mes posts jusqu'au bout, voici un
petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait, j'ai
bon ?#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02d/%02d/%04d",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Charlie Gordon wrote:PS: pour les courageux qui lisent mes posts jusqu'au bout,
voici un petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait,
j'ai bon ?
Charlie Gordon wrote:
PS: pour les courageux qui lisent mes posts jusqu'au bout,
voici un petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait,
j'ai bon ?
Charlie Gordon wrote:PS: pour les courageux qui lisent mes posts jusqu'au bout,
voici un petit test d'acuité visuelle :
Pour quelles raisons ED ne doit-il pas utiliser le code suivant pour
sa conversion de dates :
C'est pas le sizeof qui est correct..., C'est peut être au niveau du
format dans sprintf, les champs de la structure ftime étant des champs
de bits unsigned, c'est un format "%02u/%02u/%04u" qu'il faudrait,
j'ai bon ?
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02u/%02u/%04u",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Mais il y a des problèmes plus graves dans ce code :
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02u/%02u/%04u",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Mais il y a des problèmes plus graves dans ce code :
#define MAX_DATE_SIZE sizeof("??/??/????")
char buf[MAX_DATE_SIZE];
sprintf(buf, "%02u/%02u/%04u",
,ftimep.ft_day
,ftimep.ft_month
,ftimep.ft_year + 1980);
Mais il y a des problèmes plus graves dans ce code :