J’ai un problème très simple en C. Je lis un fichier ligne par ligne et le stocke dans un tampon
char line[80];
Chaque ligne a la structure suivante:
Timings results : 2215543 Timings results : 22155431 Timings results : 221554332 Timings results : 2215543
Ce que j’essaie de faire est d’extraire la valeur entière de cette ligne. Est-ce que C ici fournit une fonction simple qui me permet de le faire?
Merci
Peut utiliser sscanf par ligne, comme:
#include int time = -1; char* str = "Timings results : 120012"; int n = sscanf(str, "Timings results : %d", &time);
dans ce cas, n == 1 signifie succès
Oui – essayez atoi
int n=atoi(str);
Dans votre exemple, vous avez un préfixe fixe avant l’entier, vous pouvez donc simplement append un décalage à szLine avant de le transmettre à atoi, par exemple
int offset=strlen("Timings results : "); int timing=atoi(szLine + offset);
Assez efficace, mais ne gère pas bien les lignes qui ne sont pas comme prévu. Vous pouvez vérifier chaque ligne en premier si:
const char * prefix="Timings results : "; int offset=strlen(prefix); char * start=strstr(szLine, prefix); if (start) { int timing=atoi(start+offset); //do whatever you need to do } else { //line didn't match }
Vous pouvez également utiliser sscanf pour parsingr des lignes comme celle-ci, ce qui rend le code plus concis:
int timing; sscanf(szLine, "Timings results : %d", &timing);
Enfin, reportez-vous à la section Analyse syntaxique d’Integer en chaîne C pour plus d’idées.