Russian Qt Forum
Сентябрь 30, 2024, 22:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Простые вещи] Не могу сконвертировать char* в QString  (Прочитано 6848 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 09, 2011, 19:28 »

Здравствуйте!


Что-то заткнулся на таком простом коде:

Код:
 char prog[1000];
sprintf( prog, "text" );

QString mainProgramFile=QString::fromAscii( prog );
qDebug() << "Set main program file to " << mainProgramFile; // <-- Здесь сегфолт

На последней строчке этого кода происходит Segmentation fault. И я даже не могу проверить, что содержит переменная mainProgramFile. Это особенно странно, так как я использую только ASCII символы.


Вопрос: Как правильно сконвертировать char* в QString, чтобы потом с этой строкой можно было работать без сегфолта?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Kolobok
Гость
« Ответ #1 : Март 09, 2011, 19:54 »

У меня работает.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Март 09, 2011, 20:12 »

У меня работает.

Операционка какая?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Март 09, 2011, 20:16 »

сегфолт происходит и в самой минимальной программе, состоящей только из этих строк? Там падать нечему, может память бьётся где-то в другом месте.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 09, 2011, 20:37 »

Код
C++ (Qt)
char prog[1000] = {'\0'}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Fat-Zer
Гость
« Ответ #5 : Март 09, 2011, 20:56 »

Код
C++ (Qt)
char prog[1000] = {'\0'}
 
sprintf уже копирует в строку всё, что нужно...
« Последнее редактирование: Март 09, 2011, 21:12 от Fat-Zer » Записан
Kolobok
Гость
« Ответ #6 : Март 09, 2011, 21:00 »

Операционка какая?

Win7 32-bit
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #7 : Март 09, 2011, 21:25 »

сегфолт происходит и в самой минимальной программе, состоящей только из этих строк? Там падать нечему, может память бьётся где-то в другом месте.

Да, какой-то буллщит. Сделал минимальный пример - в нем работает. А в полной программе этот же код сегфолтится.
Записан

Собираю информацию по крупицам
http://webhamster.ru
BRE
Гость
« Ответ #8 : Март 09, 2011, 21:30 »

А в полной программе этот же код сегфолтится.

может память бьётся где-то в другом месте.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #9 : Март 09, 2011, 22:06 »

Ну, в общем, если код написан после такого кода:

Код:
 
 qInstallMsgHandler(myMessageOutput);

 QtSingleApplication app(argc, argv);
 
 if(app.isRunning()) // Не запущен ли другой экземпляр
  {
   printf("Another exemplar is running.\n");
   exit(0);
  }

то имеем сегфолт. Если до этого кода, то работает как надо. Дальше не копал.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Март 09, 2011, 22:10 »

Запусти под валгриндом.

ПыСы: какой смысл использовать *printf в с++, а тем более с использованием Qt???
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #11 : Март 09, 2011, 22:24 »

какой смысл использовать *printf в с++, а тем более с использованием Qt???

Потому что в конечном счете мне работать с argv[0], а это - классическая C-строка. Но я мог бы обойтись и без printf(), просто это буфер чтобы понять, что глючит - чисто C-шный код или недра Qt.
Записан

Собираю информацию по крупицам
http://webhamster.ru
fuCtor
Гость
« Ответ #12 : Март 10, 2011, 07:37 »

какой смысл использовать *printf в с++, а тем более с использованием Qt???

Потому что в конечном счете мне работать с argv[0], а это - классическая C-строка. Но я мог бы обойтись и без printf(), просто это буфер чтобы понять, что глючит - чисто C-шный код или недра Qt.

Если хоитте работать с аргументами, то почему бы не использовать:
Код:
QStringList QCoreApplication::arguments () [static]
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 23.