从char缓冲区中提取整数

我在C中有一个非常简单的问题。我正在按行读取文件,并将其存储在缓冲区中

char line[80]; 

每行具有以下结构:

 Timings results : 2215543 Timings results : 22155431 Timings results : 221554332 Timings results : 2215543 

我想要做的是从这一行中提取整数值。 这里的C是否提供允许我这样做的任何简单function?

谢谢

每行可以使用sscanf,例如:

 #include  int time = -1; char* str = "Timings results : 120012"; int n = sscanf(str, "Timings results : %d", &time); 

在这种情况下,n == 1表示成功

是的 – 尝试atoi

  int n=atoi(str); 

在您的示例中,您在整数之前有一个固定的前缀,因此您可以在将其传递给atoi之前简单地向szLine添加偏移量,例如

  int offset=strlen("Timings results : "); int timing=atoi(szLine + offset); 

相当高效,但不能很好地处理不符合预期的线条。 您可以先检查每一行:

  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 } 

您还可以使用sscanf来解析这样的行,这样可以使代码更加简洁:

  int timing; sscanf(szLine, "Timings results : %d", &timing); 

最后,另请参阅将整数解析为字符串C以获取更多想法。