Tengo un problema muy simple en C. Estoy leyendo un archivo en línea y lo guardo en un búfer
char line[80];
Cada línea tiene la siguiente estructura:
Timings results : 2215543 Timings results : 22155431 Timings results : 221554332 Timings results : 2215543
Lo que estoy tratando de hacer es extraer el valor entero de esta línea. ¿Proporciona C aquí alguna función simple que me permita hacer eso?
Gracias
Puede usar sscanf por línea, como:
#include int time = -1; char* str = "Timings results : 120012"; int n = sscanf(str, "Timings results : %d", &time);
en este caso n == 1 significa éxito
Si – prueba atoi
int n=atoi(str);
En su ejemplo, tiene un prefijo fijo antes del entero, por lo que simplemente podría agregar un desplazamiento a szLine antes de pasarlo a atoi, por ejemplo
int offset=strlen("Timings results : "); int timing=atoi(szLine + offset);
Bastante eficiente, pero no soporta bien las líneas que no son las esperadas. Sin embargo, puedes revisar cada línea primero:
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 }
También puede usar sscanf para analizar líneas como esta, lo que hace que el código sea más conciso:
int timing; sscanf(szLine, "Timings results : %d", &timing);
Finalmente, vea también Parsing Integer to String C para obtener más ideas.