Je n'ai pas d'erreur d'include pour <string.h>
Bien sûr. Il s'agit d'un fichier standard donc présent quel que soit le compilateur que tu utilises. Tu voulais dire peut-être que t'as pas d'erreur de compilation mais seulement d'édition des liens ? Normal, la déclaration d'une fonction n'est pas obligatoire en C. Seulement, lorsqu'une fonction n'est pas déclarée, le compilateur suppose qu'il s'agit d'une fonction qui retourne un int. Si la fonction existe dans un des fichiers sources de tes projets mais ne retourne pas un int, le compilateur génèrera une erreur ("déclaration != définition"). Sinon, la fonction sera cherchée pendant l'édition des liens et si elle n'est pas trouvée, l'éditeur des liens génèrera une erreur.
par contre j'ai une erreur de link avec le symbole "strsep"
C'est que cette fonction n'est pas disponible dans l'implémentation que tu utilises ou que tu ne t'es pas lié avec le fichier objet qui la contient, mais c'est plus que certain qu'on est dans le premier cas. Mon intuition me le dit .
Si le format est le même pour chaque ligne (nb1;nb2;nb3;nb4), utilise sscanf. Par exemple (première approximation) :
n = sscanf(ligne, "%[0-9];%[0-9];%[0-9];%[0-9]", s1, s2, s3, s4);
Où s1, s2, s3, s4 sont des tableaux de char (char s1[51], etc.). Si tout se passe bien, n devra contenir 4 : le nombre de lectures formatées réussies. Utilise ensuite atoi ou strtol pour convertir les chaînes lues en entier. Ici, atoi est plus que suffisant.
Dans le code précédent, la taille des buffers s1, s2, s3, s4 n'est pas renseignée à sscanf => risque de débordement de tampon. Le bon code est donc :
n = sscanf(ligne, "%50[0-9];%50[0-9];%50[0-9];%50[0-9]", s1, s2, s3, s4);
Enfin, la véritable bonne solution c'est de se fabriquer un tokenizer adapté à ses besoins ou d'utiliser des fonctions libres de droit en cherchant un peu sur le net.
Partager