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

 
 
> Работа со строкой., STM32F103
Jenya7
сообщение Nov 18 2013, 07:47
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я принимаю строку с терминала. Знак принятия строки - возврат каретки (клавиша ENTER), который я отбрасываю.
CODE
void ParseString(char *str)
{
//split command and argument from string - space separated
char *command;
char *argument;
command = strtok(str," ");
argument = strtok(NULL," ");
UsartSendInt(strlen(argument)); // for debug
if(strcmp(command,"test")==0)
{
if(strlen(argument) == 0)
{
UsartSendString("No argument\r");
}
else
{
UsartSendString("There is an argument\r");
}
}
}

Если я ввожу, скажем, ”test 100 ” все работает как надо - я вижу ответ - There is an argument.
Если я ввожу только ”test” - я попадаю туда же.
Чтобы понять, где проблема я вывожу длину аргумента на терминал.
Получается что даже если аргумент пустой длина аргумента - 2.
Код
2
There is an argument.

В чем проблема? В AVR все работало как надо.
Еще добавлю - я работаю в IAR.

Сообщение отредактировал Jenya7 - Nov 18 2013, 07:49
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Fedor
сообщение Nov 18 2013, 08:47
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 26-10-05
Пользователь №: 10 125



[quote name='Jenya7' date='Nov 18 2013, 13:47' post='1211386']
Я принимаю строку с терминала. Знак принятия строки - возврат каретки (клавиша ENTER), который я отбрасываю.

strlen может и не проверять указатель на 0. В этом случае если в 0x0-0x01 адресе лежат символы то получите как раз 2.
Я бы препочел все же проверять сам argument на 0.

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:16
Рейтинг@Mail.ru


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