Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 4
Регистрация: 24.03.2016
Сообщений: 75
1

Strcasecmp вылетает

29.01.2018, 13:13. Показов 801. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
OS ubuntu
компилятор g++

когда использовался компилятор gcc то проблем не было. код был
C++
1
2
3
4
5
6
7
8
       
#define XML_UNIV_   "UNIVERSAL" 
xmlParserCtxtPtr xpc;
xmlNodePtr xcur;
 
xcur=xpc->myDoc->root;
        
        if (strcasecmp(xcur->name,XML_UNIV)==0)
и отрабатывал нормально

но когда компилятор g++
то код приходится править на
C++
1
2
3
4
5
6
7
       
#define XML_UNIV_   "UNIVERSAL"
xmlParserCtxtPtr xpc;
xmlNodePtr xcur;
 xcur=xpc->myDoc->parent;
        
        if (strcasecmp((char*)xcur->name,XML_UNIV)==0)
и на if вылетает. я так понимаю srtcasecmp почему то не может сравнить строки.

в чем причина?
Миниатюры
Strcasecmp вылетает  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2018, 13:13
Ответы с готовыми решениями:

Хром не открывается, модем вылетает, везде просят капчу. И вылетает синий экран
В общем, хотела найти лечение на соседнем форуме...но мой вопрос проигнорили.:( Одна надежда на...

вылетает
после ввода двух массивов программа закрывается , как сделать чтобы такого не было #include...

Вылетает 1с.77
Всем привет. имеем 1с77 0,27 конфигурация бухгалтерия конфигурация типовая. у 2х пользователей...

Вылетает VB
Импортирую компонент Microsoft Terminal Service Control Type Library Вот весь код: Private Sub...

10
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
29.01.2018, 13:52 2
почему в 1-м примере xcur=xpc->myDoc->root;, а во-втором xcur=xpc->myDoc->parent;?
0
2 / 2 / 4
Регистрация: 24.03.2016
Сообщений: 75
29.01.2018, 14:00  [ТС] 3
делало в том что похоже используются разные библиотеки. у старой libxml есть у данной структуры член root, а у более новой libxml2 его нет.
вот описание новой структуры (старой не нашел) http://xmlsoft.org/html/libxml-tree.html#xmlNode

но вылетает то не тут вылетает почему то на стандартной функции сравнения строк srtcasecmp. это то и странно
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
29.01.2018, 14:19 4
C
1
2
char str[100]="abcd";
  if(strcasecmp(str,"ABCD")==0)printf("1\n"); else printf("0\n");
Что gcc что g++ компилируют нормально. Ищите ошибку в другом месте. Вдруг NULL передаете вместо текста например, или приводите int* к char*, по приведенному куску это непонятно
Попробуйте просто вывести как текст, например
0
2 / 2 / 4
Регистрация: 24.03.2016
Сообщений: 75
29.01.2018, 14:43  [ТС] 5
а что если str NULL то strcasecmp должна вылетать? что то в ее описании об этом ни слова
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
29.01.2018, 15:24 6
проблема не в strcasecmp, а в попытке доступа по нулевому указателю.
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
29.01.2018, 15:26 7
В интернете пишут что неопределенное поведение.
Самое простое - функция попытается читать по одному символу, но чтение из NULL зарпещено - вот и сегфолт.
Проверок на входные значения в Си-шных функциях обычно нет, предполагается что программист знает что делает.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
29.01.2018, 15:27 8
только сейчас заметил: а почему переменная с именем xpc не инициализирована? конечно, туда мусор всякий попадается(скорее всего, туда попадает ноль), вот и вылетает.
0
2 / 2 / 4
Регистрация: 24.03.2016
Сообщений: 75
29.01.2018, 17:22  [ТС] 9
xpc иницинирована. просто не стал весь код с несколько тыс строк сюда копировать. скопировал чтобы было видно какие типы переменных и струтуры используются.

кстати заметил если сделать так (что конечно неверно)

C++
1
if (strcasecmp((char*)&xcur,XML_UNIV)==0)
то вылета нет. если же пытаюсь использовать любой член из структуры xcur - вылет. вообще на любой.
похоже действительно не в функции дело. странно что if (strcasecmp(xcur->name,XML_UNIV)==0) в С норма проходит а в С++ такие проблемы.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
29.01.2018, 18:04 10
инициализацию покажите.
и перед использованием указателя проверьте его на NULL(подсказка: xcur->name).
0
2 / 2 / 4
Регистрация: 24.03.2016
Сообщений: 75
30.01.2018, 10:56  [ТС] 11
C++
1
 xpc=xmlCreateFileParserCtxt(filename);
там чтение xml
Миниатюры
Strcasecmp вылетает  
0
30.01.2018, 10:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2018, 10:56
Помогаю со студенческими работами здесь

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

Вылетает 1С 8
Подскажите пожалуста, в чем причина вылета 1с 8 при формировании Оборотносальдовой ведомости? И как...

Вылетает 1С
Добрый день. Платформа 2.0 (версия самая последняя, не помню какая, скачана 03.01.2015) ...

вылетает интернет
1.вылетает интернет при загрузках и работе онлайн программ, приходиться перезегружаться; 2. комп...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru