• Как осуществить чтение больших файлов на QT?

    @Lol4t0
    У вас просто закончилась память.

    32-битному приложению на x86 архитектуре доступно по умолчанию 2 ГБ пользовательской памяти. С учетом того, что в эту же память замплен код самого приложения и библиотек, и фрагментации кучи - числа порядка 1.5 ГБ - практический потолок использования памяти.

    Или думайте, как уменьшить расход памяти - или переходите на 64 бита.
    Ответ написан
    Комментировать
  • Необходимый набор программ для работы с C++

    @tty6
    Варинат №1: взять бесплатный Microsoft Visual Studio Express (ссылка), в комплект уже входит отладчик, редактор и компилятор от фирмы Microsoft.
    Вариант №2: скачать Qt (сборка с mingw ссылка) это среда разработки для C++ фреймворка Qt, включает в себя свободный компилятор mingw32 и отладчик gdb. В поставку включена IDE QtCreator в ней можно создавать проекты C++.
    Ответ написан
    Комментировать
  • Linux - Как записать строку в другой кодировке в объект string в c++?

    EXL
    @EXL
    Энтузиаст
    Попробуйте привести строки к одной общей кодировке, а затем сравнить. Для этого можно воспользоваться библиотекой libiconv:

    main.cpp:
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    
    using namespace std;
    
    #include <iconv.h>
    
    string iconv_recode(const string from, const string to, string text)
    {
        iconv_t cnv = iconv_open(to.c_str(), from.c_str());
    
        if (cnv == (iconv_t) - 1) {
            iconv_close(cnv);
            return "";
        }
    
        char *outbuf;
        if ((outbuf = (char *) malloc(text.length()*2 + 1)) == NULL) {
            iconv_close(cnv);
            return "";
        }
    
        char *ip = (char *) text.c_str(), *op = outbuf;
        size_t icount = text.length(), ocount = text.length()*2;
    
        if (iconv(cnv, &ip, &icount, &op, &ocount) != (size_t) - 1) {
            outbuf[text.length()*2 - ocount] = '\0';
            text = outbuf;
        } else {
            text = "";
        }
    
        free(outbuf);
        iconv_close(cnv);
    
        return text;
    }
    
    void compare_strings(const string &aString1, const string &aString2) {
    
        cout << "String 1: " << aString1 << endl
             << "String 2: " << aString2 << endl;
    
        if (aString1 == aString2) {
            cout << "Identical strings!" << endl
                 << "-----" << endl;
        } else {
            cout << "Different strings!" << endl
                 << "-----" << endl;
        }
    }
    
    int main()
    {
        ifstream file_1("word_1.txt");  // The "Proverka" Word in UTF-8
        ifstream file_2("word_2.txt");  // The "Proverka" Word in CP1251
        string word_1, word_2;
    
        file_1 >> word_1;
        file_2 >> word_2;
    
        compare_strings(word_1, word_2);
    
        word_2 = iconv_recode("CP1251", "UTF-8", word_2);
    
        compare_strings(word_1, word_2);
    
        return 0;
    }


    exl@exl-Lenovo-G560e:~/SandBox/text_enc > enca -L russian  word_1.txt 
    Universal transformation format 8 bits; UTF-8
      Doubly-encoded to UTF-8 from ISO-8859-5
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > enca -L russian  word_2.txt 
    MS-Windows code page 1251
      LF line terminators
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > cat word_1.txt 
    Проверка 
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > cat word_2.txt 
    ��������
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > ./text_coding 
    String 1: Проверка
    String 2: ��������
    Different strings!
    -----
    String 1: Проверка
    String 2: Проверка
    Identical strings!
    -----
    Ответ написан
    1 комментарий
  • C++ linux компиляция с libcurl библиотекой - как осуществить?

    @nicolausYes
    Вам нужно прилинковать libcurl статически, тогда бинарник будет включать в себя все необходимое и будет самодостаточным. Если нет возможности (ну не предоставляет библиотека статичской версии), тогда брать с собой динамически подключаемый .so файл.

    Если собрать rpm или deb пакет, можно позаботиться о зависимостях и выкачать библиотеку при установке.
    Ответ написан
    2 комментария
  • Какой встраиваемый язык выбрать: Lua или Python?

    icelaba
    @icelaba
    Знаю и умею всё
    lua а именно ее разновидность luajit имеет особенность которая выделяет luajit из всех скриптовых языков, а именно "халявное" взаимодействие с C чз ffi, не надо конвертить Cшные структуры - можно читать напрямую без потерь на конверсию во внутренние типы скриптового языка.
    luajit - очень очень быстрый, у меня на части задач он выдает производительность равную C шному коду

    Сама по себе lua если выкинуть парсер и как следствие использовать прекомпилированный lua код, очень мало увеличит размер вашего приложения - в случае android не больше чем на 50кб (там правда apk это zip)

    Собственно я использую luajit именно по причине ffi
    и невероятной скорости.

    Недостаток lua - меня коробят конструкции if then end do :-) - но только в эстетическом плане, сам по себе язык очень мощный и имеет все что надо - тупели, клозуры и тп :-)
    Ответ написан
    Комментировать
  • Есть ли в c++ способ выделить память под все переменные?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Для начала прочитайте эти объяснения. Осознайте, что существует 2 принципиально разных способа хранения информации - на стеке и в "динамической памяти". Для объектов на стеке не надо дополнительно резервировать память, и они автоматически удаляются при выходе из функции.
    Выделить память автоматически, разумеется, нельзя. Дело в том, что часто нам не известен размер памяти, которую необходимо выделить. Однако, в большинстве случаев можно использовать стандартные типы данных, например, std::vector, в которых эти операции написаны за вас. В реальном коде может практически не быть в ручную вызываемых операций delete благодаря использованию "умных указателей".
    В вашем случае далеко не факт что проблема именно в этом. Возможно, вы обращаетесь за границы какого-то массива или пытаетесь что-то повторно удалить, или одна из десятков других причин. Различное поведение может объясняться различным режимом сборки debug/release, или, скорее всего, вам "везет" в виртуалке, и вы не вылезаете за пределы зарезервированной для вашего приложения памяти.
    P.S. Почитайте умных книжек по C++, без этого не как. Начните с этой, например.
    Ответ написан
    Комментировать
  • Как передать с клиентского компьютера на сервер фотографии, где произойдет их обработка?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Можно отправить через POST запрос c помощью libcurl или winapi или boost.asio.
    Ответ написан
    Комментировать
  • Как передать с клиентского компьютера на сервер фотографии, где произойдет их обработка?

    opium
    @opium
    Просто люблю качественно работать
    Это можно сделать на чем угодно, вплоть на чистом си или си++
    Каким боком к этому пришивают очередь не сильно понятно, мне кажется и без неё прекрасно все будет жить.
    Ответ написан
    Комментировать
  • Что необходимо знать, чтобы создать игру с 2D?

    Teivaz
    @Teivaz
    Ещё можно попробовать реализовать "Жизнь" Конвея. Я в своё время делал на опенжл. довольно просто и увлекательно.
    Ответ написан
    Комментировать
  • Как с помощью boost можно проверить файл на видимость/невидимость?

    @leclecovich
    Никак. Для Windows используйте это.
    Для *nix - проверяйте наличие точки в начале имени файла.
    Ответ написан
    Комментировать
  • Что за ошибка линкера LNK1120?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Там же прямо и написано, на одну строку выше:
    1 -- не найдено определение функции _main
    2 -- не найдено определение метода std::string Parser::GetType(std::string)

    Думаю что 1 должно быть библиотекой, подключенной к 2.
    Ответ написан
    Комментировать
  • Как опознать данный ответ, получаемый от сервера (пример внутри)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Content-Encoding: gzip
    Ответ написан
    2 комментария
  • Как считать данные в переменную (пусть целого беззнакового типа, размером 2 байта)?

    @leclecovich
    Среди подводных камней может быть следующее:
    1 Сокет должен быть открыт до и закрыт после
    2 Вызов recv с параметром MSG_WAITALL блокирующий, т.е. если придет один только один байт, то вызывающий тред будет заблочен до прихода следующего
    3 Порядок байт. Скорее всего будет LE, но мало ли...
    4 Данные принимаются от любого источника. Если нужно иначе - recvfrom(...)
    5 Под Windows есть ограничения на работу сокетов
    Ответ написан
    1 комментарий
  • Графический интерфейс в c++

    afiskon
    @afiskon
    Qt, GTK, wxWidgets. Я бы советовал для начала попробовать wxWidgets, он довольно легкий и во всех операционках одинаково отображается. К тому же, он широко используется во всяких скриптовых языках, что когда-нибудь может пригодится. Давным давно писал о wxWidgets здесь и тут.
    Ответ написан
    Комментировать
  • Графический интерфейс в c++

    @DeFANCE
    Я бы посоветовал глянуть в сторону Qt.
    Ответ написан
    Комментировать
  • Подскажите парер XML для C++ для разбора больших файлов (1Гб+)

    becks
    @becks
    Ищите по запросу SAX-парсер. На ум приходит Xerces, expat, но много всяких.
    Ответ написан
    4 комментария
  • Сохранение массива в файл и его чтение

    @rozhik
    Если файл бинарный — то просто записываете
    fd = fopen( filename, "wb" ); write( fd, i_regions, sizeof( i_regions ) ); fclose( fd );
    , читаем — вместо врайт — рид.
    Если должен быть текстовый, редактируемый руками — тогда json, inifile или как удобнее редактировать (как по мне JSON best ).
    Ответ написан
    7 комментариев
  • Почему исчезли автор и его статья про возврат Windows при покупке компьютера?

    @alivanich
    По поводу топика — извините, я тогда хотел по горячим следам написать, но напугался суровости хабры, а сейчас уж и подавно. Слишком тоталитарная секта, так что опишу в комментарии.
    Да и уж время прошло, не помню детали, но помню общий алгоритм.
    0. Позвонил в техподдержку самсунга (до покупки), спросил, что мне сделать, чтобы вернуть деньги за винду. Мне сказали, что покупаете в любом магазине и несёте в сервис-центр, где вам удаляют винду.

    1. Купил ноут в плеерру (23.07.12), курьер мне его привёз, я его проверил не включая (то есть проверил просто факт наличия всего и серийные номера). Ноутбук не включаем, установку винды не запускаем.

    2. Сразу отвёз в авторизованный сервис центр. Ко мне ближайший был 3G (примерное название) недалёко от метро Новые Черёмушки в Москве. Там мне не были рады и вообще хмуро отнеслись. По всем признакам я понял, что они знают про эту процедуру, но я первый. Однако в формализм играть не стали и согласились сделать всё сразу, так что даже повторно ехать не пришлось. Выдали через часик заключение о правильном удалении винды. То есть ноут готов для любых манипуляций.

    3. Дальше я сам не спешил и только 6.08.13 написал в техподдержку самсунга (что спросил — не вспомню, а копию на почту не прислали, но по ответу вполне можно примерно догадаться). Мне миленько ответили (ссылка из письма до сих пор актуальна и полезна):
    «Добрый день.

    Готовы компенсировать Вам стоимость операционной системы.

    Ознакомьтесь пожалуйста, с информацией по ссылке (http://www.samsung.com/ru/support/compensation/CompensationforWindowsOS.html) заполните Заключение — указав все необходимые реквизиты и отправьте нам заказным письмом.

    В случае возникновении вопросов Вы можете связаться с Информационным центром для потребителей, контактное лицо – Курганова Наталья.

    Просим корреспонденцию в адрес компании направлять по адресу: 117105, МОСКВА, А/Я 4, ООО «СРСС» Кургановой Н.Ю.»

    4. Отправил по указанному адресу заказным письмом заявление с указанием реквизитов (обычные банковские реквизита от счёта, к которому привязана карточка. Банк был или авангард или ткс, не важно абсолютно.

    5. Через неделю (а может две) получил деньги на счёт. Всё!
    Ответ написан
    3 комментария