Цитата(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