Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: странное поведение cvavr
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
messenger
Здравствуйте!
сдера разработки 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]);}

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

  • Судя по названию и применению LEN_CMD и COL_CMD они перепутаны местами
  • Размер массива cmd[] (6) меньше, чем требуется в COL_CMD - нет места для завершающего строку 0
  • Печать принятых соманд делается по счетчику count_cmd, который может быть больше, чем число команд в массиве, т.к. привышение количества команд блокирует запись их в массив, но не блокирует увеличение счетчика count_cmd
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.