从char缓冲区中提取整数

时间:2009-06-23 10:58:30

标签: c

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

char line[80];

每一行都有以下结构:

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

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

由于

2 个答案:

答案 0 :(得分:16)

每行可以使用sscanf,例如:

#include <stdio.h>
int time = -1;
char* str = "Timings results : 120012";

int n = sscanf(str, "Timings results : %d", &time);

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

答案 1 :(得分:2)

是 - 尝试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);

最后,另请参阅Parsing Integer to String C以获取更多建议。