parce qu'une chaine non convertible en nombre vaut zéro et pas NaN (qui existe pas pour les entiers), mais on retombe sur la question précédente, pourquoi convertit il en entier et pas en chaine dans cette comparaison

?
d'ailleurs:
[squalyl@dedibox ~]$ cat test.c
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(void)
{
long int l;
char *data,*end;
data="12345";
errno=0;
l=strtol(data,&end,10);
printf("data=[%s] long=[%ld] errno=[%d] end=data+%d\n",data,l,errno,end-data);
data="plop";
errno=0;
l=strtol(data,&end,10);
printf("data=[%s] long=[%ld] errno=[%d] end=data+%d\n",data,l,errno,end-data);
return 0;
}
[squalyl@dedibox ~]$ gcc test.c
[squalyl@dedibox ~]$ ./a.out
data=[12345] long=[12345] errno=[0] end=data+5
data=[plop] long=[0] errno=[0] end=data+0
donc ça résout bien le pb pour la valeur des chaines non convertibles, et ça change même pas errno!
pour savoir quel type est utilisé dans la comparaison, j'ai bien peur qu'il faille aller voir dans le code himself

edit: idem pour les doubles:
[squalyl@dedibox ~]$ cat test.c
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(void)
{
double l;
char *data,*end;
data="12345";
errno=0;
l=strtod(data,&end);
printf("data=[%s] double=[%g] errno=[%d] end=data+%d\n",data,l,errno,end-data);
data="plop";
errno=0;
l=strtod(data,&end);
printf("data=[%s] double=[%g] errno=[%d] end=data+%d\n",data,l,errno,end-data);
return 0;
}
[squalyl@dedibox ~]$ gcc test.c
[squalyl@dedibox ~]$ ./a.out
data=[12345] double=[12345] errno=[0] end=data+5
data=[plop] double=[0] errno=[0] end=data+0