У меня есть круговой буфер текста ASCII длиной 1000 байт. Он будет постоянно обновляться и дополняться.
Моя проблема в том, что я использую strstr(), чтобы определить, где начинается раздел данных, ища «$ GPRMC», и я ищу «\ r \ n», чтобы указать конец этого блока. Длина будет переменной, и мне нужно найти способ определить длину каждого блока данных (строковых данных), чтобы я мог затем проанализировать его и сохранить в переменной и т. д.
Я попытался вычесть два указателя, возвращенные из strstr(), но получил число, которое сильно увеличилось (оно было выше 6 миллиардов), но на самом деле длина строки составляет около 60-80 символов.
char *data, *end;
int diff;
data = strstr(&gps_buffer[gps_head], "$GPRMC");
end = strstr(&gps_buffer[gps_head], "\r\n");
diff = end - data;
strstr
не подходит для использования с циклическими буферами - он не имеет представления о переносе. - person Sergey Kalinichenko   schedule 03.06.2014std::array
для буфера и операцийstd::string
,std::find()
может работать лучше, чем использованиеstrstr()
. - person πάντα ῥεῖ   schedule 03.06.2014strstr
не обрабатывает его. Когда буфер заканчивается, и вы должны зациклиться,strstr
продолжает двигаться вперед. - person Sergey Kalinichenko   schedule 03.06.2014strstr
переходит конец буфера, это поведение undefined. Он будет продолжаться до тех пор, пока не найдет ноль, поэтому, скорее всего, он не рухнет. - person Sergey Kalinichenko   schedule 04.06.2014