Перейти к содержанию
    

странное поведение cvavr

Здравствуйте!

сдера разработки 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]='\0';

}

}

}

count_cmd++;

pch = strtok (NULL, ":[]");//NULL-искать в той же строке

}

 

for (i=0; i<(count_cmd); i++)

{printf("%s\r\n", cmd);}

 

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...