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

 
 
> Передача указателя в качестве аргумента.
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
Ответов
megajohn
сообщение Dec 20 2016, 11:48
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Jenya7 @ Dec 20 2016, 13:33) *
Код
uint32_t XML_PARSER_FindElementEnd(char *xml_str, char* el_name, char* pchr)
{
    char buf[el_size+4];
  
    memcpy(&buf[0], "<", 1);
    memcpy(&buf[1], el_name, el_size);
    memcpy(&buf[el_size+1], "/>\0", 3);
}


какая то магия понаписана

может попроще для людей сделать ?

Код
char buf[ el_size + sizeof( "</>" ) ];
sprintf( buff, "<%s/>",  el_name );


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 20 2016, 12:05
Сообщение #3


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

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



Цитата(megajohn @ Dec 20 2016, 17:48) *
какая то магия понаписана

может попроще для людей сделать ?

Код
char buf[ el_size + sizeof( "</>" ) ];
sprintf( buff, "<%s/>",  el_name );

вы считаете что монструозная sprint это попроще? sm.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 21 2016, 09:37
Сообщение #4


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

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



Цитата(Jenya7 @ Dec 20 2016, 15:05) *
вы считаете что монструозная sprint это попроще? sm.gif

Вообще-то, вся монструозная XML_PARSER_FindElementEnd() - это ад и ужас.
Не проще написать свою strstr(), которая знает, что шаблон, который мы ищем, должен быть с кавычками? Расход стека - единицы байт.

Это если "в лоб". А если XML-ка может быть испорченной, готовьте мыло с верёвкой. Полноценный парсер, который проверит все возможные ошибки, написать не очень просто. Даже если уметь писать на языке си...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
x893
сообщение Dec 21 2016, 10:51
Сообщение #5


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Цитата(esaulenka @ Dec 21 2016, 12:37) *
Вообще-то, вся монструозная XML_PARSER_FindElementEnd() - это ад и ужас.
Не проще написать свою strstr(), которая знает, что шаблон, который мы ищем, должен быть с кавычками? Расход стека - единицы байт.

Это если "в лоб". А если XML-ка может быть испорченной, готовьте мыло с верёвкой. Полноценный парсер, который проверит все возможные ошибки, написать не очень просто. Даже если уметь писать на языке си...


На любом языке не просто. Но можно.
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
|- - Jenya7   Цитата(esaulenka @ Dec 21 2016, 15:37) Во...   Dec 21 2016, 10:34
- - 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
- - esaulenka   Цитата(Jenya7 @ Dec 21 2016, 13:34) а что...   Dec 21 2016, 12:41
- - Jenya7   Цитата(esaulenka @ Dec 21 2016, 17:41) Од...   Dec 21 2016, 14:10


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

 


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


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