Задать вопрос
  • Как исправить ошибку с построчным чтением из бинарного файла C++?

    @res2001
    Андрей Загородний, Это как раз то о чем я писал - string нельзя так сохранять/загружать.
    Вы просто можете посмотреть файл, который у вас записался на диск - там не будет строки AutoBase.Name.
    Вообще это относится не только к string, но и к любым сложно устроенным объектам - требуются отдельная процедура сериализации/десериализации.
    В вашем случае AutoBase.Name вы должны сохранять примерно так:
    uint32_t name_len = a.Name.length();
    In.write(&name_len, sizeof(name_len));
    In.write(a.Name.c_str(), name_len);

    Процесс чтения - аналогичный, сначала читаете размер, а затем заданное количество символов. После чтения размера можно подготовить строку - выделить память с помощью string.reserve() для последующего чтения.
    Такой подход будет работать с обычным строками, каждый символ которых представлен 1 байтом. Для многобайтных строк (все варианты Unicode) этот вариант уже не пройдет, т.к. string.length() - возвращает количество символов в строке, а не количество байт, а пишете в файл вы байты, а не символы.
  • Как решить эту проблему?

    @res2001
    true, устаревшей оси или браузера. Зависит от того где хранятся корневые сертификаты, используемые браузером: в собственном хранилище или используется хранилище ОС (как в винде, например). Как дело обстоит в Мас ОС не в курсе.
  • Почему не получается создать голый репозиторий на сервере для совместной работы с Git с использованием протокола SSH?

    @res2001
    На счет authorized_keys - это актуально, когда у тебя свой ssh сервер и ты к нему подключаешься. Тут же ты подключаешься по ssh к gitlab. Нужно просто через веб интерфейс загрузить туда свой публичный ключ. В документации gitlab должно быть написано как это сделать.
    Ключи, сгенерированные в putty нужно предварительно конвертировать в формат ssh, для этого в комплекте putty есть утилита puttygen. Формат хранения ключей putty PPK, формат, используемый ssh - PEM. В гугле полно статей по этому поводу.
  • Как OpenVPN сочетает redirect-gateway и push?

    @res2001
    776166,
    это понятно, не понятно остальное

    Что понятно? Вы, возможно, не правильно написали опцию. Я указал правильное написание и дал ссылку на мануал с описанием ее применения.
    Остальное будет работать. Маршрут по умолчанию применяется всегда когда не находится других более специализированных маршрутов. И это не специфика ВПН или openvpn - так работает маршрутизация в TCP/IP.

    Вообще вы можете прямо на локальной машине задать фиксированные маршруты, если вас такой вариант устраивает.
    Опции route/iroute и push route аналогично добавляют маршруты, разница только в том где они добавляют их - push route добавляет маршрут на ВПН клиенте, route/iroute - на ВПН сервере.
  • Как OpenVPN сочетает redirect-gateway и push?

    @res2001
    776166,
    но я тоже хочу их пушить с персональных настроек.

    Пожалуйста. Тот же самый push будет работать и в файле конфигурации пользователя. Для сетей за клиентом надо использовать iroute, вместо route.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Кода я и не заметил :-)
    Я писал выше про использование глобальных переменных. Вариант имеет право на существование, но когда у тебя будет проект побольше и с несколькими потоками глобальные переменные вообще не вариант, как правило.
    Вообще исопльзоавние глобальных переменных в принципе не очень хорошая идея, а не только для потоков.
    В некоторых случаях это допустимо, но таких случаев не много.
    И если уж ты хочешь научиться работать с потоками, то важно научиться и правильно передавать в поток параметры и принимать возвращаемое значение. И параметров и возвращаемых значений может быть не одно.
    И это я еще не начинал говорить о совместном использовании данных разными потоками - это вообще отдельная огромная тема.

    Обрати внимание, что твоя потоковая функция по сигнатуре не соответствует документации. Она должна быть такой: https://docs.microsoft.com/en-us/previous-versions...
    Твой код в принципе рабочий, но стоит добавить опций компилятору, как он начнет ругаться на эту ошибку, по формальным признакам.
    И еще - потоковая функция возвращает значение типа DWORD, в твоем случае можешь передавать возвращаемое значение потока через него, не используя глобальную переменную.
    В POSIX потоковые функции возвращают указатель void*
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton,
    передо мной стоит задача изучить именно CreateThread

    Изучай конечно. Просто работа с потоками она +-одинакова везде, т.к. поток - совершенно определенная сущность ОС, одинаковая для всех ОС. POSIX вариант потоков считаю наиболее продуманным и простым, а вариант стандартной библиотеки по сути копирует POSIX. Внутренняя реализация потоков в ядре ОС, конечно, разная для разных ОС, но это не должно волновать прикладного программиста.
    никак не могу понять, как будет выглядеть конструкция для, вот допустим, вывода на экран возвращаемого значения функции?

    Выкладывай код, который у тебя получился и вопросы по нему. Дальше в слепую уже трудно что-то советовать.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton, Я тут нахваливаю потоки стандартной библиотеки, но вы должны понимать, что все более высокоуровневые реализации используют реализацию потоков предоставляемую операционной системой, поэтому внутри того же thrd_create() из стандартной библиотеки спрятан вызов CreateThread в винде или pthread_create() в POSIX совместимых ОС. Никаких других потоков (так же как и процессов), кроме предоставляемых ОС быть не может.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton, (int *)gn
    Это не ссылка на параметр. Если gn целое, то вы просто меняете тип данных из целого в указатель, при этом само значение не меняется.
    Соответственно в потоковой функции вы должны сделать (int)arg для получения из указателя снова целого числа.
    В таком случае вы никак не можете вернуть из потока значение, разве что используя глобальные переменные, но это плохой вариант (для средних и крупных проектов).

    Если у вас возврат из потоковой функции имеет тот же тип, что и параметр, то можете передавать именно указатель на gn: &gn и через этот же указатель возвращать значение.
    Если же тип возвращаемого значения другой, то лучше всего объявить структуру, содержащую и параметр и возвращаемое значение и передавать указатель на структуру. А кроме того это самый наглядный и простоя для понимания вариант.
    Кстати, в реализации потоков стандартной библиотеки предусмотрен вариант возврата значения из потока в виде целого числа: https://en.cppreference.com/w/c/thread/thrd_join
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Nulltiton,
    как теперь передать параметр?

    Четвертый параметр CreateThread предназначен для этого. И почитайте наконец MSDN: https://docs.microsoft.com/en-us/windows/win32/api...
    Обычно все необходимые параметры для потока собирают в структуру и передают указатель на структуру. Если у вас только целое число в качестве параметра, то можете конвертировать это целое в указатель и таким образом передать. В потоковой функции надо будет сделать обратное преобразование параметра.
    И надо подумать о том, как будете возвращать значение. Можно возвращать в той же структуре, которую передаете в праметре. Но сначала надо дождаться завершения потока!
    Вообще рекомендовал бы для потоков использовать функции стандартной библиотеки - потоки завезли в С11. Там синтаксис приближен к POSIX, он более прост и понятен, чем стандартные функции WinAPI. Кроме того, этим вы делаете код более платформонезависимым.
  • Как исправить ошибку "Кадр не находится в модуле" при создании потока?

    @res2001
    Дмитрий, Не так давно появилась книжка "Экстремальный Си". Ничего особо экстремального нет, но материал там уровнем по выше, чем в обычных учебниках. Хоть в книге есть и ошибки/опечатки, но в целом рекомендую.
    На счет учебников - сгодится люой для начала. Си язык простой и не большой. Дополнительную информацию ищите тут и в гугле то же всего полно.
    Есть несколько тем, обычно плохо понимаемых начинающими: указатели и адресная арифметика, работа с динамической памятью. На них надо обратить особое внимание.
  • Как реализовать строковой тип данных в Си?

    @res2001
    voproser45654, Текстуры складывайте в байтовые массивы uint8_t, например.
  • Как реализовать строковой тип данных в Си?

    @res2001
    voproser45654, Любому программисту на Си запись char x[] = "ddd" или char *x = "ddd" одинаково привычна и читабельна. А вот если вы начнете это заменять на самопальный string, то читающему сначала придется выяснить что это за тип и как с ним работать. Вот он будет удивлен, когда узнает, что это псевдоним для Сишных строк, оканчивающихся нулем.
    Обычно, когда вводится дополнительный тип, то к нему нужен и некоторый API для работы с типом. У вас же предполагается использовать API стандартной библиотеки, видимо. Программисту, читающему код, каждый раз когда он встретит подобный вызов с параметром типа string, придется вспоминать что это тот же самый char*.
    Короче, на мой взгляд, эта замена не добавляет читаемости коду.
  • Как реализовать строковой тип данных в Си?

    @res2001
    Какой смысл в подобной замене? Только то что вместо char будете писать string? Но все операции остаются прежними - это не будет строковым типом данных.

    Если хотите строки подобные плюсовым, то нужно объявлять структуру с хранением указателя на выделенную под строку память и возможно длиной текущей сохраненной строки и длиной текущего буфера. К структуре дописать пачку функций, реализующий работу с вашей строкой. За пример интерфейса можно взять тот же std::string из плюсов.
  • Как windows получает настройки proxy?

    @res2001
    LAG_LAGbI4, Вы можете пойти "от противного" - сделайте pac скрипт, в котором отменяйте использование прокси, разместите его раздачу в DHCP (скрипт можно положить на какой-то общедоступный сетевой ресурс, а в DHCP опциях задать путь к нему), как сказано в статье.
  • Как работает дизассемблирование в С++?

    @res2001
    Stalker_RED, Тема написания первого ассемблера по ссылке не раскрыта, я считаю :)
    Собственно, вопрос риторический.
  • Как работает дизассемблирование в С++?

    @res2001
    Василий Банников,
    Так никогда не писали. ...
    Когда появились нормальные терминалы - стали писать на ассемблере

    Как же написали первый ассемблер? :-)
  • Инструменты для визуализации mongodb?

    @res2001
    На сколько помню, в монге можно задать некоторые правила проверки при заполнении контейнеров, некий аналог схемы в реляционных БД. Если эти правила есть, то теоретически можно что-то построить, основываясь на этих правилах, если нет - каждая запись может быть произвольным объектом.
  • Ubuntu. Какой сервис или процесс пишет данные строки в syslog?

    @res2001
    Константин, На сколько я понимаю эти сообщения появляются при загрузке ОС. Видимо systemd сообщает об этапах загрузки системы. Это не ошибки, а просто информационные сообщения.