Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: mmotop20oo12
Дата сообщения: 11.06.2015 00:03
Можете объяснить, почему не С++? Что с ним такого, чего нет в С#, Я уже программировал на Delphi (полтора года), и, думаю, что уже могу понять, какие элементы нужны в конкретных ситуаций. Если вам интересно я могу вам кинуть свой курсовой проект, в который вложил все свои знания. (есть баги с интернетом ). https://yadi.sk/d/zHP0noQEhCJLA . Вначале (с авторизацией) натупил, т.к. не представлял грамотный алгоритм
Автор: NeoAnomaly
Дата сообщения: 11.06.2015 05:01

Цитата:
Можете объяснить, почему не С++? Что с ним такого, чего нет в С#

mmotop20oo12 я же выше всё написал, что думаю по этому поводу. с++/с# - это лишь инструменты и выбор стоит за тобой. Но с++ обладает огромными возможностями и содержит кучу нюансов, и именно поэтому я советую начать с чего-нибудь попроще, наращивать сложность постепенно, а то и надорваться можно.

Посмотри/почитай программисткие шуточки, в каждой шутке есть доля шутки.


Автор: mmotop20oo12
Дата сообщения: 11.06.2015 10:04
Ну, уговорили тогда подскажите литературу. Шилдт подойдет? Какая книга?
Автор: NeoAnomaly
Дата сообщения: 11.06.2015 12:36
mmotop20oo12, тут в соседней теме по C# зашёл разговор за книги.
Автор: mmotop20oo12
Дата сообщения: 11.06.2015 22:06
а чего тема такая молодая, даже страницы не набралось

Добавлено:
может Шилдт'а начать читать? Говориться что он авторитет в языках С
Автор: V0lt
Дата сообщения: 12.06.2015 10:46
mmotop20oo12
Цитата:
а чего тема такая молодая, даже страницы не набралось
http://forum.ru-board.com/topic.cgi?forum=33&topic=3706&glp
Автор: mmotop20oo12
Дата сообщения: 16.06.2015 16:37
Здравствуйте. возникла очень странная проблема: не хочет компилировать проект (visual studio 2013), не работает функция gets(str); Также не работают и остальные функции типа strcpy, strcat и т.д. Вот код:

Код:
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cstdio>
#include <stdio.h>
#include <string.h>

using namespace std;
int main()
{
    char str;
    gets(str);
    return 0;
}
Автор: akaGM
Дата сообщения: 16.06.2015 20:54
using namespace std;
int main()
{
char* str = new char[160];
initscr();
getstr(str);
...


лучше всего...
Автор: NeoAnomaly
Дата сообщения: 17.06.2015 06:10
mmotop20oo12, я бы всё же не использовал unsafe функции, в ногу конечно не выстрелишь, но думать больше надо
Автор: Aleksoid1978
Дата сообщения: 29.07.2015 04:07
Всем привет.
Может конечно не в совсем в тему, но все же задам вопрос.

В связи с выходом VS2015 - решил проект(MPC-BE) адаптировать под новую студию. Все получилось, кроме одной "мелочи". Проект для построение .dll не собирается в VS2015, ругается при линковке:

Код:
error LNK2001: unresolved external symbol __wcsicmp
Автор: GeorgeMame
Дата сообщения: 01.08.2015 18:13
[more] [more] [more] Сначала не нашел этой темы и поэтому "залез" в Фортран, хотя пишу на C.

У меня основной алгоритм последовательный, т.е. не распараллеливается, и при этом выдает последовательно числа, каждое из которых независимо от основного алгоритма обрабатывается другим алгоритмом, который "завязан" только на это число и на числовую информацию, которая занимает немного места в памяти, известна до применения нового алгоритма и при этом одна и та же для всех чисел, выдаваемых первым алгоритмом. При этом числа, выдаваемые последовательно основным алгоритмом, второй алгоритм модифицирует. Не подскажите, как грамотно задействовать остальные ядра, чтобы они не простаивали. Идея понятна: размножить числовую информацию, которая занимает немного места в памяти, в количестве, равном числу оставшихся ядер, а вот как дальше действовать? Вопрос стал ребром на процессорах с архитектурой haswell, т.к. скорость счета с помощью новых команд FMA (+=a*b) увеличилась по сравнению с SSE (вплоть до последних версий SSE) в 4 раза. Это легко проверить: у меня два 6-ти ядерных процессора - Intel® Core™ i7-980 Processor (12M Cache, 3.33 GHz) и Intel® Core™ i7-5820K Processor (15M Cache, 3.33 GHz). Так вот второй перемножает две матрицы 10000*10000 в четыре раза быстрее (7.0 с. и 29.3 с.). При этом использовалась функция перемножения матриц dgemm из пакета Intel MKL. Пользуюсь интеловским компилятором и соответственно OpenMP. Дело в том, что основной алгоритм выдает числа не регулярно и надо отслеживать освободившиеся ядра или ставить в очередь, если все ядра заняты. Но вот куда в очередь поставить, чтобы алгоритм работал как можно эффективней, если все ядра заняты, не совсем понятно.

P.S.
Частично ответ получил в теме, посвященной Фортрану, но может быть еще что-либо дельное услышу. [/more] [/more] [/more]
Автор: wsadneg
Дата сообщения: 07.08.2015 21:06
Не подскажете, где найти простой пример HID-клиента на обычном Си. Нашёл HID Demonstrator на плюсах, но моя среда разработки плюсы не поддерживает.
Автор: ItsJustMe
Дата сообщения: 08.08.2015 05:13
Aleksoid1978
Так как проект mpciconlib крайне простой, то создание его с нуля и добавление в него файлов старого проекта решило проблему.
Автор: Aleksoid1978
Дата сообщения: 08.08.2015 13:04
ItsJustMe
Да я решил проблему похожим способом. Сделал новый проект, он собрался. И сравнением настроек нашёл причину
Автор: diamon28
Дата сообщения: 10.08.2015 00:49
Как создать класс наследник в си++ ?
Автор: slay93
Дата сообщения: 10.08.2015 12:12
diamon28
class Parent {};

class Child : public Parent {};

с помощью выделенного и объявляется, что класс Child является наследником класса Parent.
Кроме public-наследования есть еще protected- и private-. Отличие в доступе к методам родительского класа извне.
Автор: V0lt
Дата сообщения: 22.08.2015 22:39
Часто вижу подобную конструкцию для очистки списка:

Код: class CFilter {...};

CAtlList<CFilter*> filters;
...
while (!filters.IsEmpty()) {
    delete filters.RemoveHead();
}
Автор: Igorr
Дата сообщения: 22.08.2015 22:51
V0lt

Цитата:
второй вариант не эквивалентен первому

Во втором варианте нет удаления элементов списка из памяти - только убирание элементов из списка.
Автор: V0lt
Дата сообщения: 23.08.2015 07:12
Igorr
Цитата:
Во втором варианте нет удаления элементов списка из памяти - только убирание элементов из списка.

MSDN говорит иначе.

Цитата:
CAtlList::RemoveAll
This method removes all of the elements from the list and frees the allocated memory. In debugs builds, an ATLASSERT will be raised if all elements aren't deleted or if the list structure has become corrupted.
Автор: Igorr
Дата сообщения: 23.08.2015 16:48
V0lt
С этим списком так и есть. Но народ (и я в том числе) часто пользуется списками-массивами на основе CObject (CPtrArray и т.д.), а для них
Цитата:
CObArray::RemoveAll
Removes all the pointers from this array but does not actually delete the CObject objects.
Очевидно, что для единообразия первый вариант предпочтителен.
Автор: karakurt2
Дата сообщения: 05.09.2015 11:25
Посоветуйте, как избавиться от вот этого сообщения:

Цитата:

You are using an Intel supplied intrinsic header file with a third-party compiler


В данном случае настроено окружение для компилятора Intel C++, но используется Microsoft C++. Есть какой-нибудь символ препроцессора или волшебный ключик, который даст понять компилятору, чтобы он успокоился?
Автор: bomzzz
Дата сообщения: 10.09.2015 07:32
http://rghost.ru/7tM6ZflpJ
никто не сможет объяснить в двух словах простыми словами, суть BufferOverflow и __security_check_cookie.

Добавлено:

Цитата:
Защита пространства исполняемого кода для Windows
Сейчас существует несколько различных решений, предназначенных для защиты исполняемого кода в системах Windows, предлагаемых как компанией Майкрософт, так и сторонними компаниями. Майкрософт предложила своё решение, получившее название DEP (от англ. Data Execution Prevention — «предотвращение выполнения данных»), включив его в пакеты обновлений для Windows XP и Windows Server 2003. DEP использует дополнительные возможности новых процессоров Intel и AMD, которые были предназначены для преодоления ограничения в 4 Гб на размер адресуемой памяти, присущий 32-разрядным процессорам. Для этих целей некоторые служебные структуры были увеличены. Эти структуры теперь содержат зарезервированный бит NX. DEP использует этот бит для предотвращения атак, связанных с изменением адреса обработчика исключений (так называемый SEH-эксплойт). DEP обеспечивает только защиту от SEH-эксплойта, он не защищает страницы памяти с исполняемым кодом. Кроме того, Майкрософт разработала механизм защиты стека, предназначенный для Windows Server. Стек помечается с помощью так называемых «осведомителей» (англ. canary), целостность которых затем проверяется. Если «осведомитель» был изменён, значит, стек повреждён. Существуют также сторонние решения, предотвращающие исполнение кода, расположенного в областях памяти, предназначенных для данных или реализующих механизм ASLR.

это вот это?
Автор: ne_viens
Дата сообщения: 10.09.2015 09:31
Переполнение буффера происходит, когда в функцию (например wsprintf()) подаётся больше данных, чем размер на стеке выделенного буффера. Функция сначала записывает полностью буффер, а потом продолжает писать дальше, а там адрес возврата из функции. Если эти данные смастерить из своего кода таким образом, что вместо штатного адреса возврата записывается возврат на этот код, то можно сделать джайлбрейк для айфона и ещё много полезного.

Но некоторым такая удобная вещь почему то не понравилась и они придумали __security_check_cookie();
На стеке, сразу перед штатным адресом возврата выделяется переменная, в которую в самом начале подпрограммы записываетса случайное значение. В самом конце подпрограммы эта переменная проверяется, и, если значение изменилось, делается вывод, что была попытка переписать и следующий непосредственно за переменной адрес возврата и прогу посылают на __debugbreak();

В C компиляторах эта проверка обычно по умолчанию уже включена, а в приведённой ссылке находится её реализация для ASMa.
Автор: vitektm
Дата сообщения: 10.09.2015 14:56
Пишу программку на Borland C++ встали два вопроса
это анализ строки (наличие русских букв)
Поиск строки текста (русского)
Поиск регулярным выражением комбинации символов (русских букв)
(строка ansi)

Что по посоветуете лучше использовать.

Нужно получить веб страницу к примеру с вирустотал и распарсить её, опять же что использовать ? (навскидку думаю копать в сторону CURL)
Автор: bomzzz
Дата сообщения: 10.09.2015 15:08
Автор: z0o
Дата сообщения: 11.09.2015 10:29


Цитата:
Нужно получить веб страницу к примеру с вирустотал и распарсить её, опять же что использовать ?


Нужно, чтобы прога при чтении указывала собственную кодировку UTF-8.

Данная кодировка была специально придумана чтобы не париццо с парсерами - любой текст строго принадлежит определенным подмножествам символов, языки не пересекаются, поэтому всегда известно на каком языке написано сообщение. Выделить из него русский - полторы секунды. В общем - мечта шпийонов.
Автор: Zatupitel
Дата сообщения: 14.09.2015 16:57

Цитата:
это анализ строки (наличие русских букв)

Если только два языка, то вроде как все что больше chr(127) попадает в локализацию языка.
Для UTF вроде как выше chr(1024).
Автор: mbku
Дата сообщения: 15.09.2015 16:26
Как перенести значение из 4-х байтового поля в два 2-х байтовых?
ну типа
есть ra=0x11223344
а надо получить
ra1=0x1122
ra2=0x3344
Автор: suslovp
Дата сообщения: 15.09.2015 16:42
ra2 = *((short int*)(&ra));
ra1 = *(((short int*)(&ra))+1);

Добавлено:
это для порядка байт little-endian, для big-endian:
ra1 = *((short int*)(&ra));
ra2 = *(((short int*)(&ra))+1);
Автор: Garrett
Дата сообщения: 16.09.2015 07:09
mbku
как-то так
ra1 = (ra >> 16) & 0x0000FFFF;
ra2 = ra & 0x0000FFFF;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.