Извлечь целое число из буфера символов - PullRequest
8 голосов
/ 23 июня 2009

У меня очень простая проблема в C. Я также читаю файл и сохраняю его в буфер

char line[80];

Каждая строка имеет следующую структуру:

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

Что я пытаюсь сделать, это извлечь целое значение из этой строки. Предоставляет ли C здесь какую-либо простую функцию, которая позволяет мне это делать?

Спасибо

Ответы [ 2 ]

16 голосов
/ 23 июня 2009

Может использовать sscanf на строку, например:

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

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

в этом случае n == 1 означает успех

2 голосов
/ 23 июня 2009

Да - попробуйте Атой

   int n=atoi(str);

В вашем примере у вас есть фиксированный префикс перед целым числом, так что вы можете просто добавить смещение в szLine перед передачей его в atoi, например,

   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 для дальнейших идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...