реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> странное поведение cvavr, странное поведение cvavr
messenger
сообщение Dec 28 2016, 08:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Здравствуйте!
сдера разработки 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]);}

}
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 15 2017, 20:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Указатели тут не при чем.

  • Судя по названию и применению LEN_CMD и COL_CMD они перепутаны местами
  • Размер массива cmd[] (6) меньше, чем требуется в COL_CMD - нет места для завершающего строку 0
  • Печать принятых соманд делается по счетчику count_cmd, который может быть больше, чем число команд в массиве, т.к. привышение количества команд блокирует запись их в массив, но не блокирует увеличение счетчика count_cmd
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 23:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016