Задать вопрос
  • Как слить все секции PE файла в одну?

    polger , дело в том, что у каждой секции свой смысл и свои разрешения доступа к памяти.
    В секции .text лежит код. Код отображается в память процесса для исполнения. Над содержимым секции перед исполнением проводится ряд манипуляций.
    В секции .idata лежит таблица импорта символов. В секции .edata - экспорта символов. А в секции .rdata - память неизменных данных с разрешением доступа только на чтение.
    Посмотри что из себя представляет секция .idata. Лично я не представляю, помимо ограничения прав доступа, как загрузчик PE будет работать со слитыми вместе data и text секциями. Так же я не представляю, где в процессе слияния секций может быть экономия места.
  • Как слить все секции PE файла в одну?

    polger
    Как слить всё в одну секцию?

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

    Ася
    Как запустить скрипт на C из perl?

    Для начала нужно найти интерпретатор языка C, выполненный на языке Perl. И, наконец, взять исходные коды на языке C и запустить их интерпретацию через интерпретатор языка C на языке Perl, в рамках твоего проекта.
    Думаю, это самый верный метод с учетом деталей постановки твоей задачи. :)
  • Как упростить сравнение 4 чисел с помощью if?

    Ruslan Malkhozov , а для чего надо оставить все три if? Какая у них цель на самом деле?
  • Зачем ставить фигурные скобки после вызова метода?

    @MarkusD Куратор тега C++
    Vitaly , просто за тов. Толстый Лорри замечено пестрение больно ультимативными заявлениями на темы вкуса колбасных обрезков. В одном из вопросов пару лет назад он вполне спокойно назвал Джона Кармака идиотом на основании того что тот относит себя к const nazi.
    В данном случае я каюсь: я просто сагрился на очередной вяленький "больно ультиматум" и токсично повел себя. :)

    Между тем, Roman привел действительно хорошие ссылки.
    Дело в том, что управление областью видимости и точками декларации может быть эффективно использовано в рамках короткого и понятного кода. Особенно это касается корутин, лямбда-функций для асинхронной обработки или просто для всего пространства асинхронного исполнения. Важная особенность в том, что деструктор (с сайд эффектом) локального объекта будет вызван тогда, когда завершится блок, а конструктор - в начале.
    Плюс - стилистическое оформление. Мало кто знает про #pragma region и мало кто приветствует его наличие в коде. Мало кто знает про вложенные блоки и мало кто приветствует их в коде. Мало кто вообще любит работать над стилем изложения кода и мало кто приветствует эту работу.
  • Зачем ставить фигурные скобки после вызова метода?

    @MarkusD Куратор тега C++
    Толстый Лорри , так делать стоит и всегда. Это выглядит очевидно для тех кто знает стандарт, а польза прозрачно понятна. =)
  • Кириллические строки в с++?

    @MarkusD Куратор тега C++
    Юрий Есин , а можно на этом моменте поподробнее? Какие именно архитектуры накладывают свои ограничения? От каких именно констант типизации компилятора? Что такое "константы типизации компилятора"? От какой именно "самой" кодировки и что именно зависит?
    Ты, случайно, юикод с UTF-8 не путаешь?

    Тот же UTF-16, к примеру. Он по определению ну явно не может всего 2 байта в памяти держать)

    Какой минимальный размер символа UTF-16? Максимальный?
    Какой минимальный размер символа UTF-8? Максимальный?

    Просто такие нюансы должны быть очевидны и не вижу смысла в который раз расписывать все эти детали...

    Да, такие нюансы очевидны и должны быть широко известны. Суть моих вопросов в этом.
  • Кириллические строки в с++?

    @MarkusD Куратор тега C++
    Данил , какой именно компилятор тебе это выдает и при каких именно флагах сборки?
  • Как организовать взаимодействие php и с++?

    @MarkusD Куратор тега C++
    Александр , исходной информации мало.
    Что за php-скрипт? Что за программа на c++? Где они находятся, в пределах одной среды или в разных? Синхронное нужно взаимодействие или асинхронное? Зачем там json?
  • Что мне делать если я хочу стать разработчиком игр но не чего по этому не знаю?

    Alexandr668 , я думаю, прекрасным стартом для тебя будет обучение грамоте. Изучи родной язык. Грамотное изложение своих мыслей и грамотная постановка вопросов очень сильно помогают в процессе получения новых знаний.
    Я серьезно. Хорошо поставленную речь приятно слушать, хорошо написанное предложение приятно читать, на грамотно сформулированный вопрос приятно ответить.
    Потом лучше всего изучить язык чужеземный. Английский, например. А дальше вот тебе дорожная картаеще одна) для развития.
  • Как восстановить указатель на не первый базовый класс из неизвестного производного класса?

    @MarkusD Куратор тега C++
    DanyaFantomas , в твоем вопросе не видно кода. Описание не дает точного понимания проблемы.
    Пока складывается впечатление, будто тебе больно хочется бороться с ремаппингом памяти в следствии некорректного приведения типов. Так себе занятие.
    Приведи обоснование того, что функция , в которую передаётся указатель типа void*, может иметь право на жизнь в рамках твоего проекта.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , да, все верно. :)
    В твоем первоначальном коде инициализация нулями переменных min и max все и портила.
    Если мой, или чей-либо еще, ответ тебе помог, не забывай отметить его как решение.
  • Массив структур в c++?

    @MarkusD Куратор тега C++
    Данил ,
    Выводит ошибку

    Какую ошибку выдает? Где у тебя в вопросе описание ошибки? Где у тебя в вопросе определение твоей структуры? Зачем в объявлении параметра arr присутствует слово struct? Зачем в объявлении arr присутствуют квадратные скобки?
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , а тип std::pair тебе пока ведь и не надо подробно понимать :)
    Общая его суть такова, что он просто несет в себе два значения - это же пара. В то же время std::tie принимает пару и достает ее значения в указанные переменные, т.е. буквально распаковывает пару. std::tie лучше пока тоже особо не изучать т.к. там на самом деле в основе лежит очень глубокий раздел метапрограммирования.
    Опуская тип пары и функцию распаковки этой пары можно сосредоточиться на том, что GetMinMax просто возвращает два значения - индекс минимального и индекс максимального значений в переданном массиве stream.

    Т.е. после того, как мы просмотрели все элементы массива через цикл for, мы ставим условие...

    Не после того как мы просмотрели все элементы, а во время просмотра каждого из элементов массива. Цикл нам нужен именно для того чтобы посмотреть в каждый элемент массива по своему индексу и сделать проверку на его максимальность или минимальность.

    Мы работаем логически: у нас две руки и лента с ячейками на столе перед нами. В левой руке - индекс минимального значения, в правой - индекс максимального. Глазами мы идем по ячейкам ленты слева-направо, останавливаясь на каждой ячейке отдельно. Смотрим на ячейку, запоминаем значение в ней, далее раскрываем левую руку и смотрим на ячейку по индексу в левой руке. Запомненное значение больше того, что по индексу в левой руке? Если да, то возвращаемся к запомненному значению и кладем в левую руку его порядковый индекс. Далее повторяем процесс с правой рукой: раскрываем руку, смотрим на значение по индексу в правой руке и если там лежит меньшее значение чем мы запомнили, то кладем индекс запомненного значения в правую руку. И так повторяем с каждой ячейкой.

    Может быть ты не до конца понимаешь синтаксис языка? Если после заголовка цикла (т.е. после
    for( size_t index = 1; index < stream_length; ++index )
    ) стоят фигурные скобки, то в них записано тело цикла - набор операций для каждой итерации цикла. В теле нашего цикла мы на каждой его итерации можем работать с уникальным индексом элемента массива.
  • Как сделать грамотную декомпозицию ООП?

    @MarkusD Куратор тега C++
    dsherbakov , ну да. И в примере всего два типа, и то оба избыточных и на корню ломающих принципы ООП. :)
    У тебя препод - весельчак чтоли? Любит шутки и мозголомные задачи?

    Ну ладно. Смотри вот.
    Стек - это первый твой тип. Второй тип - это хранилище памяти для стека, его суть в предоставлении уже готовой к использованию стеком памяти.
    Третий тип - это политика вставки в стек. Дело в том, что стек характеризуется только правилом вставки и изъятия элемента, но никак не характеризуется тем, с какой стороны блока памяти первые правила применять. Вставлять можно как в начало, так и в конец. Важно лишь то, что мы забираем только оттуда, куда вставляем.
    Четвертый - это политика изъятия. Тут все так же как и для политики вставки.
    И пятый тип - это политика работы с хранилищем - где в хранилище определено начало, а где конец, и.т.д.

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

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

    @MarkusD Куратор тега C++
    dsherbakov , из твоего вопроса откровенно непонятно, что же тебе все таки надо сделать.
    Что значит "СД Стек"? Что значит "брать классы как структуры"? Зачем "необходимо разбить мою задачу на 5 или более структур", почему 5, почему структур, каких структур?
    Какие задачи твой стек должен выполнять? Какой у него должен быть интерфейс? Почему он должен быть на массиве? Какие элементы он должен хранить?
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    Сергей Саблин , твой основной ресурс - документация языка на https://en.cppreference.com/w/ .
    Документацию WinAPI стоит изучать на MSDN, у GNU тоже есть своя документация API.

    Функция fwrite реализована на языке C и является частью file i/o API. std::basic_string является частью Strings Library, а std::vector - частью Container Library в Standard Template Library, реализованной на языке C++.
    Иными словами, ты в вызов функции на одном языке передаешь память объектов из другого языка. Компилятор тебе это разрешает, т.к. это синтаксически допустимая операция. Но семантически это недопустимо.

    fwrite(&name, sizeof(name), 1, f);
    В памяти твоей структуры напрямую ничего из nazv или a не хранится, там хранятся только указатели на выделенную память + довольно много сервисных полей. Даже учитывая SSO нельзя говорить что данные самой строки размещаются внутри объекта std::string, т.к. в общем смысле это не так.
    И тут ты берешь память своей структуры и просто пишешь ее в файл. Благо в бинарном виде, это уже неплохо. Но полученный тобой результат ожидаем, т.к. ты в свой файл записал что-то, но не то, что хочешь в файле увидеть.
    Следующий твой код:
    fwrite(&name.nazv, sizeof(string), 1,f);
    fwrite(&name.semestr, sizeof(int), 1,f);
    fwrite(&name.a, sizeof(name.a), 1,f);

    на деле деле выполняет примерно то же самое, что и предыдущий. Поэтому результат не изменится.

    Но вот что тебе действительно надо сделать? Тебе надо, для начала, разобраться в используемых типах. Старайся не использовать те типы, поведение которых ты не понимаешь.
    А далее тебе надо объяснить функции fwrite, откуда ей на самом деле стоит брать память для формирования нужного тебе формата файла. Эта функция ничего не знает о строках и типах, о размещении в памяти и структуре того или иного объекта. Она принимает просто кусок памяти и пишет его в файл по текущей позиции в файле. Все.

    Чтобы записать строку, тебе надо сперва определиться с представлением строки в формате файла. Либо ты сперва пишешь длину строки в байтах, далее ее тело, либо ты пишешь строку и завершаешь ее специальным терминальным символом. Чтобы записать вектор в файл, нужно точно так же определиться с его представлением в формате файла.
    В результате ты либо записываешь данные согласно формату файла, либо считываешь их согласно формату. Все операции с бинарным файлом делаются согласно предварительно составленному формату.

    У std::string и std::vector в интерфейсе есть функция data (для строки, для вектора) для получения указателя на подконтрольную память. В случае строки ты эту память можешь писать сразу в файл. В случае вектора от int - тоже, т.к. с фундаментальными типами все довольно просто.
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    VoidVolker , а можно поподробнее о том, как в отведенной для экземпляра структуры памяти может оказаться "даже какой-то код"? Еще, пожалуйста, поподробнее о семантике терминов "данных пользователя" и "служебные данные и поля". Чем поля отличаются от данных, когда поле является пользовательским, а когда служебным? Когда данные могут быть пользовательскими, а когда - служебными?

    Сергей Саблин, ты используешь объекты типов std::string и std::vector<int>. Расскажи про эти типы, как они работают, какая у них методология управления памятью. Частью какой библиотеки являются эти типы? К какой подсистеме этой библиотеки данные типы относятся?
    К какому семейству API относится функция fwrite?
    И самое важное: на каком именно языке реализовано то семейство API, к которому относится функция fwrite, и на каком именно языке реализованы шаблоны std::basic_string и std::vector?
  • Как правильно создать заголовок, реализацию файлы в C++?

    @MarkusD Куратор тега C++
    sanya84, так тот сценарий, которым ты пытаешься "создать Exe-ник", и называется сценарием сборки.
    Если ты просто дергаешь cl с названием одного файла, как в первой строке в тексте твоей ошибки, то твой проект так не соберется. Тебе нужно сделать сценарий сборки или для cmake, или для msbuild, или для еще какой-нибудь системы сборки проектов.
    Сценарии сборки для msbuild, например, это обычные проекты для Visual C++.

    Тут, понимаешь, ни кто кроме тебя пока не знает что тебе хочется сделать и как ты пытаешься добиться желаемого. Поэтому ни подсказать не получится, ни помочь толком.