从char缓冲区中提取整数

9 c

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

char line[80];
Run Code Online (Sandbox Code Playgroud)

每行具有以下结构:

Timings results : 2215543
Timings results : 22155431
Timings results : 221554332
Timings results : 2215543
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Joa*_*son 17

每行可以使用sscanf,例如:

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

int n = sscanf(str, "Timings results : %d", &time);
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*xon 2

是的 - 尝试atoi

   int n=atoi(str);
Run Code Online (Sandbox Code Playgroud)

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

   int offset=strlen("Timings results : ");
   int timing=atoi(szLine + offset);
Run Code Online (Sandbox Code Playgroud)

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

   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
   }
Run Code Online (Sandbox Code Playgroud)

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

   int timing;
   sscanf(szLine, "Timings results : %d", &timing);
Run Code Online (Sandbox Code Playgroud)

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