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

 
 
Jenya7
сообщение Dec 20 2016, 10:33
Сообщение #1


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

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



Есть такая функция.
Код
uint32_t XML_PARSER_FindElementEnd(char *xml_str, char* el_name, char* pchr)
{
    uint32_t el_size = strlen(el_name);
    char buf[el_size+4];
  
    memcpy(&buf[0], "<", 1);
    memcpy(&buf[1], el_name, el_size);
    memcpy(&buf[el_size+1], "/>\0", 3);
    
    pchr = strstr(xml_str, buf);
    if(pchr == NULL) return 0;
    else return 1;
}

Внутри функции pchr принимает правильное значение, все прекрасно.

Проверяем
Код
uint32_t  XML_PARSER_NewElement(char *xml_str, char *parent, char* el_name)
{
    char *pchr_test=NULL;

    if (!XML_PARSER_FindElementEnd(xml_str, parent, pchr_test));
        return 0;
}

pchr_test остается 0. Подскажите где ошибка.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Dec 21 2016, 12:41
Сообщение #2


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Jenya7 @ Dec 21 2016, 13:34) *
а что страшного в обрамлении строки кавычками. строку по любому придется грузить в стек.

Один раз или два? В текущем варианте сначала в стеке (или не в стеке, я уж не знаю, что там за пределами этой функции) оказывается вариант без кавычек, а потом в стек кладётся вариант с кавычками.
Решение "найти '<', проверить, что сразу за ним нужная строка, проверить, что сразу за ним '/>' " никаких строк никуда не копирует.



Но я за решение "не строить свои велосипеды". Особенно такие велосипеды, которые могут поворачивать только налево (направо не предусмотрено. или даже просто не оттестировано).

Вот, к примеру, каркас для создания парсера: https://dev.yorhel.nl/yxml/man
Маллоков нет, размер минимальный.

Ну и mini-xml написан не под GCC, а на стандартном Си. Проще подточить под IAR, чем делать с нуля.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Передача указателя в качестве аргумента.   Dec 20 2016, 10:33
- - andrew_b   Цитата(Jenya7 @ Dec 20 2016, 13:33) Подск...   Dec 20 2016, 10:43
- - Сергей Борщ   QUOTE (Jenya7 @ Dec 20 2016, 12:33) Подск...   Dec 20 2016, 10:46
- - novikovfb   Цитата(Jenya7 @ Dec 20 2016, 14:33) Есть ...   Dec 20 2016, 10:46
- - ucMike   if (!XML_PARSER_FindElementEnd(xml_str, parent...   Dec 20 2016, 10:57
|- - Jenya7   Цитата(ucMike @ Dec 20 2016, 16:57) if (...   Dec 20 2016, 11:10
- - megajohn   Цитата(Jenya7 @ Dec 20 2016, 13:33) Кодui...   Dec 20 2016, 11:48
|- - Jenya7   Цитата(megajohn @ Dec 20 2016, 17:48) как...   Dec 20 2016, 12:05
|- - esaulenka   Цитата(Jenya7 @ Dec 20 2016, 15:05) вы сч...   Dec 21 2016, 09:37
|- - Jenya7   Цитата(esaulenka @ Dec 21 2016, 15:37) Во...   Dec 21 2016, 10:34
|- - x893   Цитата(esaulenka @ Dec 21 2016, 12:37) Во...   Dec 21 2016, 10:51
- - Jenya7   кстати сделал проверку Код #if USE_MEMCPY memc...   Dec 20 2016, 13:14
|- - conan   Цитата(Jenya7 @ Dec 20 2016, 16:14) посмо...   Dec 21 2016, 02:38
|- - Jenya7   Цитата(conan @ Dec 21 2016, 08:38) Зато m...   Dec 21 2016, 06:37
- - arhiv6   conan, а чем они Вам не нравятся?   Dec 21 2016, 06:15
|- - conan   Цитата(arhiv6 @ Dec 21 2016, 09:15) conan...   Dec 21 2016, 09:12
- - Сергей Борщ   Не, массивы переменной длины иногда могут быть пол...   Dec 21 2016, 06:51
|- - Jenya7   Цитата(Сергей Борщ @ Dec 21 2016, 12:51) ...   Dec 21 2016, 07:03
- - Jenya7   Цитата(esaulenka @ Dec 21 2016, 17:41) Од...   Dec 21 2016, 14:10


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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 08:29
Рейтинг@Mail.ru


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