Как удалить часть строки, а остальное разделить по первой "," - C (СИ)
Формулировка задачи:
День добрый!
Подскажите как мне сделать такое:
1) Дано буфер в который принимаются данные с UART Данные приходят в следующем формате: но оно странно работает, выводит 15/11/20, а дальше мусор. Я так понимаю нет нулевого символа?
char uart2_rx_buf[128];
+CCLK: "15/11/20,13:42:53+08"\r\n0\r\n
Мне из этой строки необходимо оставить только15/11/20,13:42:53
А потом данные поместь в 2 переменные типа char, разделив их по запятой. те должно получится в итоге char date должно присвоиться 15/11/20 и завершающий нулевой символ char time присвоиться 13:42:53 и завершающий нулевой символ Длина строки всегда одинакова. Потому положение знаков всегда одинаково. Спасибо.
По началу думал сделать так:
char uart2_rx_buf[128];
char date[40];
int main(void)
{
while(1)
{
strncpy(date, &uart2_rx_buf[8], 8);
}
}Решение задачи: «Как удалить часть строки, а остальное разделить по первой ","»
textual
Листинг программы
char uart2_rx_buf[128] char date_buf[9]; char time_buf[9]; char *end_str = strstr(uart2_rx_buf, ","); date_buf_len = end_str - uart2_rx_buf; time_buf_len = strlen(uart2_rx_buf) - date_buf_len - 1; strncpy(date_buf, &uart2_rx_buf[8], date_buf_len - 8); date_buf[date_buf_len - 8] = '\0'; strncpy(time_buf, &end_str[1], time_buf_len - 8);
Объяснение кода листинга программы
- Объявлены три переменные:
uart2_rx_buf(буфер приходящих данных),date_buf(буфер для даты) иtime_buf(буфер для времени). - Переменная
end_strинициализируется функциейstrstr, которая ищет первое вхождение подстроки,вuart2_rx_buf. - Переменная
date_buf_lenвычисляется как расстояние от начала строки до первого вхождения,. - Переменная
time_buf_lenвычисляется как разница между длиной строки и длиной даты, уменьшенной на один, чтобы исключить,из времени. - Строка
date_bufкопируется изuart2_rx_bufс 8-го символа (чтобы исключить,из даты) с помощью функцииstrncpy. Длина копируемой строки уменьшается на 8, чтобы исключить,из даты. - В
date_bufдобавляется нулевой символ, чтобы завершить строку. - Строка
time_bufкопируется изuart2_rx_bufпосле первого вхождения,(чтобы исключить,из времени) с помощью функцииstrncpy. Длина копируемой строки уменьшается на 8, чтобы исключить,из времени.