Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Март 09, 2011, 19:28



Название: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: xintrea от Март 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, чтобы потом с этой строкой можно было работать без сегфолта?


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: Kolobok от Март 09, 2011, 19:54
У меня работает.


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: xintrea от Март 09, 2011, 20:12
У меня работает.

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


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: Alex Custov от Март 09, 2011, 20:16
сегфолт происходит и в самой минимальной программе, состоящей только из этих строк? Там падать нечему, может память бьётся где-то в другом месте.


Название: Re: [Простые вещи] Не могу сконвертировать char* в QStrin
Отправлено: Пантер от Март 09, 2011, 20:37
Код
C++ (Qt)
char prog[1000] = {'\0'}
 


Название: Re: [Простые вещи] Не могу сконвертировать char* в QStrin
Отправлено: Fat-Zer от Март 09, 2011, 20:56
Код
C++ (Qt)
char prog[1000] = {'\0'}
 
sprintf уже копирует в строку всё, что нужно...


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: Kolobok от Март 09, 2011, 21:00
Операционка какая?

Win7 32-bit


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: xintrea от Март 09, 2011, 21:25
сегфолт происходит и в самой минимальной программе, состоящей только из этих строк? Там падать нечему, может память бьётся где-то в другом месте.

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


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: BRE от Март 09, 2011, 21:30
А в полной программе этот же код сегфолтится.

может память бьётся где-то в другом месте.


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: xintrea от Март 09, 2011, 22:06
Ну, в общем, если код написан после такого кода:

Код:
 
 qInstallMsgHandler(myMessageOutput);

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

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


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: Пантер от Март 09, 2011, 22:10
Запусти под валгриндом.

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


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: xintrea от Март 09, 2011, 22:24
какой смысл использовать *printf в с++, а тем более с использованием Qt???

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


Название: Re: [Простые вещи] Не могу сконвертировать char* в QString
Отправлено: fuCtor от Март 10, 2011, 07:37
какой смысл использовать *printf в с++, а тем более с использованием Qt???

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

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