Extraire l’entier du tampon de char

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.