Как удалить часть строки, а остальное разделить по первой "," - 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, чтобы исключить,
из времени.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д