Здравствуйте! сдера разработки CVAVR Разбираю строку полученную по UART После того как стал использовать указатели CVAVR "стал странно себя вести" Не работает защита на длинну команды и их количества if (count_cmd<LEN_CMD) //защита на 5 символов if (i<COL_CMD) //защита на 5 строк вот что принимаю
z:xx:123456:v:b:n[9] z xx 123456v v b n
Помогите пожалуйста
//================================================================================ ================== // Дано: строка вида 123:567:901:345[118.1] // ф-ция strtok заменяет разделители ':[]' на конец строки '\0' // т.о. читая по указателю строку, чтение заканчивается на '\0', после чего // ф-ция вызывая strtok повторно смещаем указатель и так до NULL //================================================================================ ================== void razbor_cmd() { int LEN_CMD=6; int COL_CMD=6; char cmd[6][6]; // Кол-во команд / Длинна команды 5! int i=0,count_cmd=0; char *pch;
pch = strtok (rx_buffer,":[]"); count_cmd=0; while (pch != NULL) //пока есть лексемы { if (count_cmd<LEN_CMD) //защита на 5 { i=0; while (*pch!='\0') { if(i<COL_CMD) { cmd[count_cmd][i++]=*pch++; cmd[count_cmd][i]='\0'; } } } count_cmd++; pch = strtok (NULL, ":[]");//NULL-искать в той же строке }
for (i=0; i<(count_cmd); i++) {printf("%s\r\n", cmd[i]);}
}
|