crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

astra
  опции профиля:
сообщение 7.2.2014, 14:45
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 7.2.2014
Пользователь №: 4050

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не хотел создавать тему, но пришлось...

реализую вот такие вещи (черновичок - отладка алгоритма):
*.h
Раскрывающийся текст

class messageBlock
{
public:
    QString str0, str1, str2, str3;
    char *mesblock0, *mesblock1, *mesblock2, *mesblock3;
    messageBlock()
    {
        str0 = QObject::tr("String0");
        str1 = QObject::tr("String1");
        str2 = QObject::tr("String2");
        str3 = QObject::tr("String3");
        mesblock0 = str0.toUtf8 ().data ();
        mesblock1 = str1.toUtf8 ().data ();
        mesblock2 = str2.toUtf8 ().data ();
        mesblock3 = str3.toUtf8 ().data ();
    }
};


*.cpp
Раскрывающийся текст

int main( int argc, char** argv )
{
    setlocale(LC_ALL, "rus");
    QApplication a( argc, argv );

    QTranslator trans;
    trans.load ( "exe_ru" );
    a.installTranslator ( &trans );

    messageBlock MsgBlk;

    FILE*   fdd;
    fdd = fopen ( "file_dat", "wt");

    fprintf ( fdd, MsgBlk.mesblock0 );
    fprintf ( fdd, MsgBlk.mesblock1 );
    fprintf ( fdd, MsgBlk.mesblock2 );
    fprintf ( fdd, MsgBlk.mesblock3 );

    fclose( fdd );
    return a.exec();
}


с помощью лингвиста перевожу...

и на выходе получаю
"строка3строка3строка3строка3"

а должно присваиваться
"строка0строка1строка2строка3".

укажите на мои ошибки. благодарю

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
crot26rus
  опции профиля:
сообщение 7.2.2014, 22:19
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 4.4.2010
Пользователь №: 1593

Спасибо сказали: 5 раз(а)




Репутация:   0  


вот здесь твои ошибки:
mesblock0 = str0.toUtf8 ().data ();
mesblock1 = str1.toUtf8 ().data ();
mesblock2 = str2.toUtf8 ().data ();
mesblock3 = str3.toUtf8 ().data ();


toUtf8() создаёт QByteArray, в котором хранятся данные и на каждой следующей строчке старый объект удаляется и создаётся новый.
В итоге все указатели хранят один и тот же адрес и указывают на область памяти, которая уже освобождена (теперь там хранится мусор: последние записанные туда данные).

P.S. может я не совсем правильно описал происходящие процессы (знающих людей прошу поправить), но надеюсь моя мысль понятна.



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.5.2025, 23:11