|
Передача указателя в качестве аргумента. |
|
|
|
Dec 20 2016, 10:33
|
Профессионал
    
Группа: Участник
Сообщений: 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. Подскажите где ошибка.
|
|
|
|
|
 |
Ответов
|
Dec 21 2016, 12:41
|

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

|
Цитата(Jenya7 @ Dec 21 2016, 13:34)  а что страшного в обрамлении строки кавычками. строку по любому придется грузить в стек. Один раз или два? В текущем варианте сначала в стеке (или не в стеке, я уж не знаю, что там за пределами этой функции) оказывается вариант без кавычек, а потом в стек кладётся вариант с кавычками. Решение "найти '<', проверить, что сразу за ним нужная строка, проверить, что сразу за ним '/>' " никаких строк никуда не копирует. Но я за решение "не строить свои велосипеды". Особенно такие велосипеды, которые могут поворачивать только налево (направо не предусмотрено. или даже просто не оттестировано). Вот, к примеру, каркас для создания парсера: https://dev.yorhel.nl/yxml/manМаллоков нет, размер минимальный. Ну и mini-xml написан не под GCC, а на стандартном Си. Проще подточить под IAR, чем делать с нуля.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Dec 21 2016, 14:10
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(esaulenka @ Dec 21 2016, 17:41)  Один раз или два? В текущем варианте сначала в стеке (или не в стеке, я уж не знаю, что там за пределами этой функции) оказывается вариант без кавычек, а потом в стек кладётся вариант с кавычками. Решение "найти '<', проверить, что сразу за ним нужная строка, проверить, что сразу за ним '/>' " никаких строк никуда не копирует. Но я за решение "не строить свои велосипеды". Особенно такие велосипеды, которые могут поворачивать только налево (направо не предусмотрено. или даже просто не оттестировано). Вот, к примеру, каркас для создания парсера: https://dev.yorhel.nl/yxml/manМаллоков нет, размер минимальный. Я хотел работать с Yxml. он только парсит элементы. а мне нужно и добавлять. к тому же Код #define BUFSIZE 4096 void *buf = malloc(BUFSIZE); yxml_t x; yxml_init(&x, buf, BUFSIZE); так и я умею  Цитата(esaulenka @ Dec 21 2016, 17:41)  Ну и mini-xml написан не под GCC, а на стандартном Си. Проще подточить под IAR, чем делать с нуля. Да как подточить. Там инклюдиться куча системных хедеров которых в IAR не существует.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|