J'utilise %d pour obtenir la valeur mais comme le montre Benoît Sibaud plus haut, il faut lire un long unsigned au lieu d'un simple int.
Puisque je renvois -1 pour signaler la non-éxistence d'une clé je dois en fait retourner un long long unsigned. Seulement long long unsigned n'est pas possible en C89 et donc il faut trouver un autre moyen.
Ici j'utilise une structure pour stocker le résultat.
fscanf("%*[^\n]\n") ne marche dans le cas ou il reste juste \n, car %*[^\n] vas échouer et donc le \n restant ne sera pas vidé. L'astuce ici consiste à mettre un espace devant le premier spécificateur de conversion: " %31[^:]: %lu%*[^\n]", de cette manière tout les espaces, saut de lignes et autre tabulations sont passé.
On peut cependant laisser le \n restant pour bien montrer ce que l'on souhaite faire : aller à la ligne suivante.
[^] # Re: En C
Posté par needs . En réponse au message taille du "fichier" /proc/meminfo. Évalué à 2. Dernière modification le 17 août 2015 à 20:14.
Je m'auto-réponds pour préciser encore une chose.
J'utilise
%dpour obtenir la valeur mais comme le montre Benoît Sibaud plus haut, il faut lire unlong unsignedau lieu d'un simpleint.Puisque je renvois
-1pour signaler la non-éxistence d'une clé je dois en fait retourner unlong long unsigned. Seulementlong long unsignedn'est pas possible en C89 et donc il faut trouver un autre moyen.Ici j'utilise une structure pour stocker le résultat.
Et une dernière pour la route :
fscanf("%*[^\n]\n")ne marche dans le cas ou il reste juste\n, car%*[^\n]vas échouer et donc le\nrestant ne sera pas vidé. L'astuce ici consiste à mettre un espace devant le premier spécificateur de conversion:" %31[^:]: %lu%*[^\n]", de cette manière tout les espaces, saut de lignes et autre tabulations sont passé.On peut cependant laisser le
\nrestant pour bien montrer ce que l'on souhaite faire : aller à la ligne suivante.