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

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


Знающий
****

Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450



Цитата(Jenya7 @ Dec 20 2016, 14:33) *
Есть такая функция.
Код
// pchr - входное значение типа "указатель на char"
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);// игнориуем исходное значение, заменяем его на результат strstr
    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. Подскажите где ошибка.

При "проверке" внутри функции значение pchr меняется так, как написано, но нигде не сказано компилятору, что значение надо оттуда вытащить наружу в вызывающую функцию.
Для языка C можно переписать так:
Код
// ppchr - входное значение типа "указатель на указатель на char"
uint32_t XML_PARSER_FindElementEnd(char *xml_str, char* el_name, char** ppchr)
{
    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);
    
    *ppchr = strstr(xml_str, buf);// по адресу ppchr записываем результат strstr
    if(ppchr == NULL) return 0;
    else return 1;
}
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));// передаем адрес pchr_test - указатель на указатель на char
        return 0;
}

для языка C++ есть более интересная возможность - передача по ссылке

Сообщение отредактировал novikovfb - Dec 20 2016, 10:48
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
- - 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
- - 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 Текстовая версия Сейчас: 19th August 2025 - 05:30
Рейтинг@Mail.ru


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