М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 23 ноября 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

78 Кб, 792x1023

C Programming Language #13 # OP 14 Окт, 23:23 #856777 В конец треда | Веб

Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

Чем конпелировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2015 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Stephen Prata "C Primer Plus, 6th Edition" (2014)
Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

Прошлые треды:

- https://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/
- https://arhivach.org/thread/140570/
- https://arhivach.org/thread/153698/
- https://arhivach.org/thread/155908/
- https://arhivach.org/thread/173837/
- https://arhivach.org/thread/180461/
- https://arhivach.org/thread/182958/
- https://arhivach.org/thread/188294/
- https://arhivach.org/thread/193780/
- https://arhivach.org/thread/198868/
- https://arhivach.org/thread/206632/

Шапка: http://piratepad.net/bJ1SdmkZyu

Ответы>>862050>>864593>>864668>>864679>>865073>>866282>>870043

14 Окт, 23:45 #2 #856791

первый

15 Окт, 00:01 #3 #856798

&thread

15 Окт, 00:10 #4 #856802

Поясните за CLang. Слышал краем уха, думал, это очередная IDE/конпелятор, а это
>транслятор для C-подобных языков, созданный специально для работы на базе LLVM
Получается, как java или c# работает? В чем плюсы и минусы по сравнению с любым другим конпелятором?

Ответы>>856817>>856905

15 Окт, 00:27 #5 #856817

>>856802
> как java или c# работает
Не совсем. Java и C# компилируются в набор инструкций виртуальной машины, а затем, при выполнении программы, В используется JIT (just-in-time compiler), чтобы преобразовать этот код в нативные инструкции. И хотя LLVM тоже можно использовать в качестве JIT, у clang по умолчанию на выходе нативный код.
Плюсы/минусы - ну, например, нормальная архитектура, один жирный бинарник, который умеет кросскомпилировать, а лицензия позволяет не давиться мозолями. И либы. А ещё -Weverything. Оптимизация иногда лучше GCC, иногда хуже. Часто ворнинги более понятные.

Ответы>>856906>>856910

41 Кб, 732x251

101 Кб, 1202x677

15 Окт, 01:10 #6 #856835

Пишу задачу Иосифа Флавия и столкнулся с такой проблемой. Разбил проект на три части - main.c, заголовочный файл и файл с функциями. Код не доходит до третьего захода и в итоге выводит двух выживших вместо одного. Собственно, как видно на пикрелейтеде, из 10 воинов, где должен умереть каждый второй, в итоге должен выжить воин под номером 5. У меня же их остается двое. Компилятор ругается и выдает ошибку. Очевидно, что проблема в освобождении динамической памяти, но я совсем запутался и не понимаю, как это сделать. Помогите дауну.
http://ideone.com/zXxyH5

Ответы>>856849

15 Окт, 02:35 #7 #856849

>>856835
> Очевидно, что проблема в освобождении динамической памяти
Очевидно, что если a - указатель на int, то со звездочкой ты кормишь в free() просто int, а free() хочет указатель на int. Убери звездочку.

15 Окт, 10:10 #8 #856905

>>856802
>Получается, как java или c# работает?
Как любой компилятор. Просто используется отдельное и документированное промежуточное представление.

15 Окт, 10:13 #9 #856906

>>856817
> Java и C# компилируются в набор инструкций виртуальной машины
Нередко и прямо в машкод компилят.
gcj для Java и Xamarin под iOS

Ответы>>856910

15 Окт, 10:33 #10 #856910

>>856906
>Нередко
Сильно сказал. Очень. это самая маргинальная хуйня что только можно найти.
>>856817
>затем, при выполнении программы
Тут вообще нужна ремарок чтобы не путать нюфагов: ява занимается этим при каждом запуске, дотянет — только при первом и переводит дело в машинный код, а не интерпретирует как жява.

15 Окт, 11:31 #11 #856921

Анон, помоги с этой хуйнёй, возможно для тебя это пустяк, но я не осилил.
>>392651

15 Окт, 14:33 #12 #856995

Решил на досуге изучать СИ по всяким кинжкам и интернетам. Задача такова.
while (scanf != EOF) туда вбиваются цифры, дальше в этом лупе я проверяю кажде число на четность/нечетность, положительное\отрицательное и т.д-
Далее всё это дело я естественно printf.
Но, нужно ещё вывести все цифры, которые я там вводил, через запятую. Окей, не проблема. Но как убрать запятую у последней цифры?

Ответы>>856996>>857032

15 Окт, 14:35 #13 #856996

>>856995
Ах да, массивы не использую.

15 Окт, 15:33 #14 #857032

>>856995
Выводи запятую перед следующим числом, а не после предыдущего.

Ответы>>857039

15 Окт, 15:49 #15 #857039

>>857032
Только тогда запятая появляется перед первым числом..

Ответы>>857041

15 Окт, 15:52 #16 #857041

>>857039
Чтобы этого не было, ты заводишь переменную, которую меняешь после первого числа, и проверяешь ее значение при выводе.

Ответы>>857053

15 Окт, 16:11 #17 #857053

>>857041
Что-то я туплю совсем.
Код:
http://pastebin.ru/C9zXlvg7

Может я вообще плохо написал и то, что мне нужно, вообще никак не выйдет?

Ответы>>857102

203 Кб, 1366x571

15 Окт, 17:52 #18 #857094

Аноны, что я делаю не так, почему получается эллипс, а не ровный круг?

Ответы>>857096>>857561

15 Окт, 17:55 #19 #857096

>>857094
Ты забываешь, что символы в консольке у тебя не квадратные, а вытянутые.

15 Окт, 17:56 #20 #857097

Только начал изучать прогу и у меня возникла проблема: в начальных легких задачках обычно нужно вводить какие-либо цифры, а затем уже происходит их подсчет и бла бла бла. А если я ввожу буквы, происходит зацикливание программы.
Как сделать защиту ввода в си, чтобы при введении любой хуйни, кроме цифр, минуса и точки програ не заедала?
Я пытался найти в интернете, но там только по с++ есть.

Ответы>>857105

Какашечка 15 Окт, 17:57 #21 #857098

мозголомство:
из большого набора данных строится связанный список. при изменении данных список перестраивается, что очень плохо. есть идея запилить кэш, при изменении данных проверять на наличие в кэше, если попадает, перестраивать список, иначе ничего не делать. кэш реализовать как хэш) но как то это все громоздко. есть идеи/примеры получше?

15 Окт, 18:01 #22 #857102

>>857053
Если в двух словах, то чтобы выводить числа, их надо сначала где-то хранить - в массиве или динамически выделенной памяти. Однако в твоем конкретном случае можно воспользоваться грязным костылем тем фактом, что у stdin есть свой буфер, в котором хранится строка, пока ты ее печатаешь, и в scanf она попадает только после того, как ты нажимаешь энтер (или ввел оче много символов), так что вывод ты можешь написать прямо в цикле scanf'а.

Ответы>>857103

15 Окт, 18:05 #23 #857103

>>857102
Вот спасибо. Я то как раз и пытался понять, как и куда вообще эти числа без массива сохраняются.

15 Окт, 18:12 #24 #857105

>>857097
http://stackoverflow.com/questions/11805414/why-does-scanf-not-wait-for-user-input-after-it-fails-one-time#comment25183250_11805434

16 Окт, 03:56 #25 #857399

Я тут столкнулся с необходимостью быстро сортировать. А так как ничего быстрее пузырька написать не могу, хочу использовать встроенную функцию c++.
Например задача:
разноцветные склянки в a[10] хранится цвет.
А в b[10] их вес.
Как мне их так отсортировать, по весу, чтобы цвета тоже поменялись?

Ответы>>857416

16 Окт, 06:00 #26 #857416

>>857399
У нас тут как бы сишечка, а не кресты. В сишечке ты можешь объединить вес и цвет каждой склянки в единую структуру, хранить массив таких структур, и уже его сортировать (например, с помощью qsort()). Если тебе религияпрепод запрещает складывать свойства одного объекта в единую структуру, ты можешь объявить третий массив, int sorted[10], заполнить его индексами объектов (от 0 до 10), и заставить qsort отсортировать его, чтобы упорядочить индексы в sorted по возрастанию веса соответствующих им склянок. Так как оригинальные массивы останутся неотсортированными, ты сможешь иметь несколько таких "вьюшек", отсортированных по разным параметрам, не дублируя при этом сами данные. http://ideone.com/Uu7Ia3

Ответы>>857455

16 Окт, 09:18 #27 #857455

>>857416
>У нас тут как бы сишечка, а не кресты.
Привыкай, пока плюсовой тред не перекаты все нюфаги будут спать здеся.

16 Окт, 13:34 #28 #857561

>>857094
Один по горизонтали стоит двух по вертикали. Это для дефолтного шрифта.

16 Окт, 16:00 #29 #857683

Нашел годную статью про то, чем лучше sublime напичкать разработчику c/c++, но сам еще не пробовал. Может, пригодится кому: https://izevg.ru/blog/2015-04/gotovim-sublime-text-3-dlya-razrabotki-c-cplusplus-koda

Ответы>>858598

16 Окт, 19:46 #30 #857820

Как записать в Си d = e^-1 mod m?
'e' и 'm' у меня известно, e^-1 равносильно 1 / e, но что делать дальше?

Ответы>>857824>>857826>>857828

16 Окт, 19:50 #31 #857824

>>857820
double d = (1/e) % m;

Ответы>>857825>>857835

16 Окт, 19:51 #32 #857825

>>857824
СМЕХ

16 Окт, 19:54 #33 #857826

>>857820
Крептографея, что ли?

Ответы>>857827

16 Окт, 19:55 #34 #857827

>>857826
ага, RSA пишу

Ответы>>857828

16 Окт, 19:57 #35 #857828

>>857820
>>857827
>d = e^-1 mod m
Это значит что надо найти такое e, что
e*d = 1 mod m

>>857820
>e^-1 равносильно 1 / e
В каком смысле "равносильно"? Это всё целые числа, там нет 1/e

Ответы>>857830>>857835>>857840

16 Окт, 19:59 #36 #857830

>>857828
* найти такое d

16 Окт, 20:02 #37 #857835

>>857824
Ответ всегда будет 0, ведь 1/e будет 0. ......
Значит неправильно :(

>>857828
ага, понял. Но ведь 1 mod m всегда будет равно 1, я правильно понимаю? m всегда будет целым числом. Как и с e / 1, я просто беру об. калькулятор и считаю там.

Ответы>>857844

16 Окт, 20:06 #38 #857838

сап, я школь, мне 13. учителя по ИКТ, которая началась у нас два года назад, забивали на нас болт и давали делать задания для аутистов. понимаю, что программирование пригодится мне в жизни, но не знаю с чего начать. думаю: чем раньше начну, тем будет лучше. подскажите с чего начать

Ответы>>857863>>857920>>866800>>867159

16 Окт, 20:09 #39 #857840

Ладно, попробую сделать так: Допустим m = 8;

буду умножать на его любое число и добавлять единицу. Из результата буду смотреть 2 множителя, которые и будут ключами.

8 1 + 1 = 9 >>> 3 3 // не подходит (одинаковые)
8 2 + 1 = 17 >>> // правильное число
8 3 + 1 = 25 >>> 5 5 // не недходит
8 4 + 1 = 33 >>> 3 * 11 // подходит. e = 3, d = 11.

Правильно ли я поступаю?

Спасибо анону >>857828 за наводку

Ответы>>857845>>859469

16 Окт, 20:14 #40 #857844

>>857835
>1 mod m всегда будет равно 1
ed = 1 (mod m)
Т.е. остаток от деления ed на m равен 1

16 Окт, 20:15 #41 #857845

>>857840
>Правильно ли я поступаю?
https://en.wikipedia.org/wiki/Modular_multiplicative_inverse
Есть стандартный алгоритм для этого

16 Окт, 20:52 #42 #857863

>>857838
>подскажите с чего начать
http://wiki.nsunc.com/haskell

56 Кб, 300x300

16 Окт, 22:01 #43 #857920

>>857838
> подскажите с чего начать

Ответы>>858535

5 Кб, 748x90

9 Кб, 700x127

16 Окт, 22:47 #44 #857950

Аноны, помогите с дебагером. Запускаю в IDA отладку x64 приложения, отладчиком выбираю Bochs. Не идёт отладка. Где-то надо конфиг править? На первом скрине - как выглядит в IDA дизассемблированный файл, на втором - что получается при отладке. Что за stosb инструкция появляется? Должно быть jmp start_0_0. Ida (или bochs) пытается запустить эмулятор как 32 битный?

Ответы>>857958>>857979>>857981

6 Кб, 333x125

16 Окт, 23:01 #45 #857958

>>857950
Ну вот чего ему не хватает? Функция под 380 ординалом есть и в 32, и в 64 битной версии.

16 Окт, 23:30 #46 #857979

>>857950
А с другим отладчиком работает? Или может в отлаживаемой программе дело?

Ответы>>858140

16 Окт, 23:32 #47 #857981

>>857950
Может быть, ты расскажешь немного больше, чтобы мы тут не занимались гаданиями по скриншотам?

Ответы>>857984

16 Окт, 23:33 #48 #857984

>>857981
Нет. Вы тупые, если не понимаете, что там. Пойду отсюда лучше.

17 Окт, 07:49 #49 #858140

>>857979
Дело не в отлаживаемой проге. Скрин от 64 битного калькулятора из стандартной поставки. Библиотеку Ida(или bochs) загружает нормально, а функцию не находит. В первом случае нормальная инструкция jmp addr вдруг превращается в stosb. 32 битные приложения так же нормально не отладить. Не так всё просто с bochs, как мне казалось. Сейчас посмотрел на выполнение функции GetStartupInfoA.
mov eax, offset kernel32_GetStartupInfoA
call bochsys_BxUndefinedApiCall
Это нужно каждую функцию в настройках описывать, как выполнять?

Ответы>>858153

17 Окт, 08:55 #50 #858153

>>858140
Bochs предназначен не для отладки обычных программ, а для эмуляции относительно небольших кусков кода. Например, декрипторов у малвари - встал на декриптор, получил расшифрованный код / ключ / расшифрованный урл, откуда оно качает payload, анализируешь. И да, конечно же, для этого тебе придется описывать вызываемые API.

Если ты не знаешь, почему тебе нужен именно Bochs - например, тебе хочется отладить калькулятор, отлаживай обычным отладчиком (Local Windows Debugger). Алсо, чаще всего, если ты опасаешься плохого поведения программы, проще (возможно, удаленно) отладить ее внутри VM, чем ебаться с Bochs.

Ответы>>858163

17 Окт, 09:28 #51 #858163

>>858153
Хотел раздебажить программу, защищённую протектором. Протектор завершает программу, если обнаруживает hardware breakpoint, точки останова на системных функциях и прочие вещи. Не знаю, как он это делает, нет опыта работы с протекторами. Думал, что bochs может подойти для этого. Теперь понятно, что у него более узкие цели использования.

17 Окт, 10:57 #52 #858186

Как не обсираться с памятью в сишечке? Есть какой-то мануал на все случаи жизни?

Ответы>>858188>>858568

17 Окт, 10:59 #53 #858188

>>858186
>Как не обсираться с памятью в сишечке?
Не писать на сишечке, когда можно

Ответы>>858190

17 Окт, 11:02 #54 #858190

>>858188
Но я хочу писать на сишечке всегда, так как писать на ней очень приятно. А ещё я хочу писать хорошо, освобождать память когда надо, выделять память когда надо, что читнуть?

Ответы>>858220>>858537

17 Окт, 12:26 #55 #858219

soC i bolshe ne proC

17 Окт, 12:26 #56 #858220

>>858190
жабку читни

17 Окт, 13:37 #57 #858247

Объясни добродвач почему этот код нормально работает?

int main (argc, argv )

int argc; char argv;
{
return EXIT_SUCCESS;
}

Ответы>>858249>>858325

17 Окт, 13:39 #58 #858248

fix
char argv;

17 Окт, 13:40 #59 #858249

>>858247
А что не так?

17 Окт, 13:40 #60 #858250

2fix
char argv[][];

17 Окт, 13:41 #61 #858252

Хочу понять тонкость этого синтаксиса.

Ответы>>858256

17 Окт, 13:44 #62 #858256

>>858252
http://stackoverflow.com/a/3092074

17 Окт, 15:34 #63 #858325

>>858247
Потому что твой компилятор поддерживает древний синтаксис. Так писали до принятия стандарта ANSI C'89.

17 Окт, 20:17 #64 #858529

Ананасы, как можно для sublime 3 скачать пакеты и поставить их без инета? С анакондой просто дома установить и скопировать потом файлы на работе прокатило, с плагинами для c/c++ вообще нихуя. Пиздец, какое же уебанство, когда все думают, что везде есть доступ в интернет, и можно нужные пакеты/документацию подтянуть. Все, кроме твоего работодателя, блять.

Ответы>>858530>>858567>>858568

17 Окт, 20:20 #65 #858530

>>858529
> Все, кроме твоего работодателя, блять.
БЕГИ ОТТУДА, ДУРАК, ПОКА ЕСТЬ СИЛЫ

Ответы>>858531

17 Окт, 20:21 #66 #858531

>>858530
Вся ирония в том, что я две недели назад только туда устроился. Когда устраивался, собеседовался в отделе N, там инет был, я видел. А устроили меня в итоге в отдел M, и вот тут началось самое веселое.

17 Окт, 20:35 #67 #858535

>>857920
Ох этот пда.

17 Окт, 20:38 #68 #858537

>>858190
Си пляс пляс читни.

17 Окт, 21:08 #69 #858567

>>858529
У тебя нет инета на работе? А что если нужно что-то загуглить по работе? Сосать хуй?

Ответы>>858575

17 Окт, 21:09 #70 #858568

>>858529
Поставь дома, скопируй профиль Sublime целиком (в portable-режиме это папка Data). Можешь вручную пакеты выкачать и скинуть в Data/Installed Packages, алсо в пакетах есть .json-ы, в них могут быть описаны зависимости.

>>858186
> Как не обсираться с памятью в сишечке?
Всегда помнить, что ты пишешь на сишечке. Писать на сишечке. Это навык, как ковырять в носу. Если не будешь ковырять - не научишься.

Ответы>>858575

17 Окт, 21:15 #71 #858575

>>858567
Есть отдельный комп в отделе, с него можно гуглить.
>>858568
>в portable-режиме
Я не знал, что его портабельным можно поставить. Как это сделать? Не помню, чтобы я видел такую опцию при установке.
Я думал, может, пути разные - пакеты лежат ведь в AppData пользователя, а у меня разные имена пользователей на компах.
А как вручную пакеты скачать? Не нашел у многих такой возможности.

Ответы>>858591

17 Окт, 21:41 #72 #858591

>>858575
> как это сделать
https://www.sublimetext.com/3dev - есть ссылки на zip-архивы, которые установки не требуют.
> пакеты лежат ведь в AppData пользователя, а у меня разные имена пользователей на компах
Похуй должно быть, там обычно не используются абсолютные пути.

> А как вручную пакеты скачать?
Сходи на https://packagecontrol.io/, найди пакет, на странице описания есть ссылка на гитхаб, на гитхабе просто .zip сохраняешь (Clone or download) и меняешь расширение на .sublime-package. Или
https://packagecontrol.io/channel_v3.json распарси чем-нибудь. Но лучше не занимайся хуйней, а сделай что-нибудь с интернетами на работе. Модем под пряжкой ремня протащи, хуй знает.

Ответы>>858598

17 Окт, 21:49 #73 #858598

>>858591
О, вижу, спасибо.
>Похуй должно быть, там обычно не используются абсолютные пути.
Тогда очень странно. Видимо, в реестре что-то прописывается или в других каких-то местах, потому что у меня анаконда с ошибкой стартует, но работает, а из >>857683 списка ни один не заработал. Дома, естественно, всё работает нормально.
>на гитхабе просто .zip сохраняешь (Clone or download)
Просто у некоторых есть именно zip, но я не понял, как его скормить саблайму, а где-то просто сборище сорцов, я думал, он такое не схавает.
Инет на работе не замутить - пизды дадут скорее всего. Я думаю, там из-за секретности разработок его нет.

17 Окт, 22:53 #74 #858634

Ананасы, обязательно ли использовать fPIC?
Я щас скомпильнул либу без него, и все нормально работает.
Или либа будет работать только на моем компе?

Ответы>>858640

17 Окт, 22:56 #75 #858640

>>858634
32-битные либы можно без PIC, будут использоваться релоки, как у нормальных людейв Windows.

Ответы>>858643

17 Окт, 23:00 #76 #858643

>>858640
Ну а вообще? Лучше с фпиком?

Ответы>>858648

17 Окт, 23:04 #77 #858647

Лан ананасы я узнал. Лучше с пиком.

17 Окт, 23:05 #78 #858648

>>858643
На x86 спорно, компилятору приходится делать немного больше телодвижений и по сути лишиться одного из регистров для достижения этого самого PIC, но зато системе не приходится ничего патчить при старте, и дублировать из-за этих патчей страницы кодовой секции между разными пользователями либы.

18 Окт, 08:36 #79 #858820

void bump(void);

18 Окт, 19:54 #80 #859194

Как нормально считать строку с пробелами? Используя gets() CLion просто перечеркивает функцию, и говорит что использовать её неправославно.

Ответы>>859210>>859225

18 Окт, 20:13 #81 #859210

>>859194
Разобрался. Вся проблема в Clion. В code::blocks и VS все отлично работает. CLion почему-то не любит gets, и напрочь отказывается работать с fgets. Просто скипает её.

sage 18 Окт, 21:31 #82 #859225

>>859194
>Используя gets() CLion просто перечеркивает функцию, и говорит что использовать её неправославно.
И он прав. В C11 функцию вообще выпилили. А вот fgets() остиалась, ее и используют.

18 Окт, 21:32 #83 #859226

Антуаны, есть строка {a, b, c}
Как мне сделать массив int со значением этой строки в аскии-коде? То есть {a, b, c} = {97, 98, 99} ?

Ответы>>859227

18 Окт, 21:36 #84 #859227

>>859226
Поясни. Строка "abc" или "{a, b, c}"? Если первое, то это массив char, просто скопируй в цикле ints[n] = string[n]. Если второе, то тебе нужен синтаксический разбор. Используй strtok, чтобы найти запятые.

Ответы>>859233

18 Окт, 21:43 #85 #859233

>>859227
Давай разберем по частям мною написаное

Есть массив char*, который заполняется пользователем:
char text [100];
fgets (text, 100, stdin);

Допустим пользователь вводит abc

Мне нужно добавить к каждому значению его ввода 10. То есть a, b и с представить в Аскии-коде (97, 98, 99), и сделать (107, 108, 109). Результат записать обратно в другой массив char. В нем должно быть (k, l, m) по аскии.

Ответы>>859236>>859246

18 Окт, 21:45 #86 #859236

>>859233
Я сначала подумал просто сделать массив интов со значениями, но потом понял что надо именно второй массив делать чаровский. Проблема как раз стоит в переводе числа. Если например вывести text[1] в "%i", то получу не аски-код, а мусор типо 1274863

18 Окт, 22:01 #87 #859246

>>859233
Так текст и так всегда представлен числами, тебе не нужны дополнительные телодвижения.
for (size_t j = 0, n = strlen(text); j < n; j++) {
printf("before: %c (%i); ", text[j], text[j]);
text[j] += 10;
printf("after: %c (%i)\n", text[j], text[j]);
}

Ответы>>859252>>859253

sage 18 Окт, 22:06 #88 #859252

>>859246
http://ideone.com/8P5Ydy

18 Окт, 22:07 #89 #859253

>>859246
Спасибо, так получилось. Только вылез другой трабл. Добавить 10 это я просто сделал такой пример. По задаче мне надо каждую бувку поднести в n степень и поделить на число m. Остаток от деления и будет результат. При маленьких числах всё работало, но с такими уже ествественно не хочет.

При
for (int i = 0, n = strlen(text); i < n; i++) {
secretText = pow(text, e) % m;
printf ("%c", secretText);
}

получаю error: invalid operands of types ‘__gnu_cxx::__promote_2<char, long unsigned int, double, double>::__type {aka double}’ and ‘long unsigned int’ to binary ‘operator%’|

Ответы>>859256>>859257>>859287

18 Окт, 22:09 #90 #859256

>>859253
Забыл добавить, что у меня 'e' это 3, а 'm' это 8.

18 Окт, 22:10 #91 #859257

>>859253
secretText = pow(text, e) % m;
проебалось при копипасте

18 Окт, 22:29 #92 #859287

>>859253
А, ты RSA пилишь? Ты делаешь это неправильно. pow предназначен для вычислений с плавающей точкой и не гарантирует тебе точный результат для таких маленьких чисел, на самом деле, гарантирует, но лучше напиши свой целочисленный modpow(n, e, m): умножай n саму на себя, сколько нужно раз, и при каждом умножении, чтобы не переполнить переменную, сразу делай % m (потом допилишь это до полноценной длинной арифметики). Алсо, твой m должен быть произведением двух простых чисел, а у тебя сколько в нем множителей и какие?

Ответы>>859469

21 Кб, 343x363

18 Окт, 23:05 #93 #859346

Почему в данном случае name выделяется память, а path нет?

Ответы>>859356>>859371

78 Кб, 1145x190

18 Окт, 23:09 #94 #859350

Обратите внимание, почему такая разность кривая получается? Он что, не умеет вычитать два double-числа?

Ответы>>859371

sage 18 Окт, 23:18 #95 #859356

>>859346
man 3 getenv

18 Окт, 23:46 #96 #859371

>>859346
Потому что создается новый, свой собственный объект name, а уже существующий path, созданный кем-то раньше, получают извне. Конкретно в случае с getenv(), память для значения переменной окружения выделяется во время запуска программы. В какой-то другой реализации getenv() могла бы так же внутри себя вызывать malloc().

>>859350
Он-то умеет. Ты - нет. Числа с плавающей точкой по определению не могут хранить любые значения, поэтому они хранят приближенные значения, достаточно точные относительно порядка числа. И с такими огромными числами, как у тебя (а они больше, чем максимальное целочисленное значение, которое влезает в double без потерь), тыщей меньше или больше - особой разницы нет. Если тебе зачем-то нужна большая точность, попробуй long double.

Ответы>>859374

37 Кб, 928x245

18 Окт, 23:46 #97 #859372

Помогите, аноны. Несколько дней мучаюсь.
Почему-то scanf, вместо того, чтобы считать новый символ с потока, пишет в переменную предыдущий введеный, и программа впадает в бесконечный цикл.
http://pastebin.com/6jqmBT05

Ответы>>859379

18 Окт, 23:47 #98 #859374

>>859371
> long double.
А вот с ним та же хрень

Ответы>>859379

18 Окт, 23:57 #99 #859379

>>859374
Может и long double не хвтать. А %lf указываешь? Если тебе нужно фиксированное число знаков после запятой и большие числа, посмотри в сторону fixed-point.

>>859372
После того, как scanf() сфэйлилась, пользовательский ввод еще в буфере ввода. И поэтому вот там, где ты просишь пользователя выбрать correct menu item, прочитай весь остаток текущей строки (просто вызывай getchar() в цикле, пока не встретишь \n).

Более правильный метод - нигде, кроме laba1.c, не пользоваться этим говном. Вместо этого лучше читать предварительно целую строку ввода с помощью fgets() или еще как-нибудь, а потом уже парсить - хочешь, тем же sscanf(), а хочешь - strtod()/strtol() и прочими. Тогда, при ошибке, ты просто выбросишь строку и сделаешь fgets() снова.

Ответы>>859380>>859382

19 Окт, 00:00 #100 #859380

>>859379
> А %lf указываешь?
Блин, такого не должно быть...
Ладно, мои траблы.

Ответы>>859381

19 Окт, 00:00 #101 #859381

>>859380
Ну, всмысле указывал

Ответы>>859383

19 Окт, 00:01 #102 #859382

>>859379
Большое тебе спасибо!

19 Окт, 00:02 #103 #859383

>>859381
Там заглавная L. Всегда путаюсь, извини.

1840 Кб, 2976x2976

19 Окт, 01:44 #104 #859420

Аноны, помогите дауну. Есть пикрилейтед программа. Как сделать так, чтобы какому-нибудь новому массиву типа char присваивалось значение, которое в данной программе является выводом, то есть как, сделать так, чтобы создавалась новая строка (например) str3[]="cccdd". Желательно, напишите работающую программу (я в программировании месяц, постараюсь поумнеть).

Ответы>>859421

19 Окт, 01:47 #105 #859421

>>859420
rez на пике указывает на нужный тебе кусок строки. Все, что тебе нужно сделать, это создать буфер достаточного размера и скопировать туда этот кусок:
char str3[16];
strcpy(str3, rez);

19 Окт, 07:17 #106 #859469

>>859287
Да, это RSA. Спасибо что подкинул идею, сегодня на парах попробую реализовать.

>вой m должен быть произведением двух простых чисел

У меня m = (p-1) + (q - 1), где p и q целые простые числа, и p != q.
Поиск скрытого и открытого ключа я реализовал как тут >>857840. Допустим при вводе 3 и 5, m = 8, потом через функцию поиска ключей получаю e = 3, d = 11.
http://pastebin.com/pFBUuEEi

Ответы>>859562

19 Окт, 11:27 #107 #859562

>>859469
> у меня m = (p-1) + (q - 1)
Это стандартная путаница. В математике про вычисления по модулю говорят как о (mod m), а в терминах RSA у тебя должно быть mod n, где n - произведение p и q.

19 Окт, 15:46 #108 #859747

http://pastebin.com/dWg1Njc9

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

Ответы>>860127

1437 19 Окт, 18:53 #109 #859904

Подскажите, в Си есть функции min, max, random? Если нет, то какие аналоги есть?

Ответы>>859912>>859915

19 Окт, 18:59 #110 #859912

>>859904
min и max надо делать макросами препроцессора, потому что иначе придется заводить такую функцию под каждый тип, причем с разным названием. Рандом есть, смотри rand, srand и т. п.

19 Окт, 19:02 #111 #859915

>>859904
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
rand()

Ответы>>859917>>859920>>859925

19 Окт, 19:05 #112 #859917

>>859915
азаза, в скобочки не обернул

19 Окт, 19:06 #113 #859920

>>859915
А если a=b?

Ответы>>859921

sage 19 Окт, 19:08 #114 #859921

>>859920
Не знаешь, чему в этом случае равно условие a<b ?

Ответы>>859922

19 Окт, 19:08 #115 #859922

>>859921
False

Ответы>>859923>>859924

19 Окт, 19:09 #116 #859923

>>859922
*0
сишкофикс

sage 19 Окт, 19:09 #117 #859924

>>859922
Тогда в чём вопрос?

19 Окт, 19:10 #118 #859925

>>859915
#define min(a, b) ((a<b)?a:(a==b)?a: b)

Ответы>>859926

sage 19 Окт, 19:11 #119 #859926

>>859925
Зачем 2 условия?

1437 19 Окт, 19:26 #120 #859940

А как сделать рандом из промежутка?

Ответы>>859972>>860127

sage 19 Окт, 20:03 #121 #859972

>>859940
reinterpret_cast<рандом>(промежуток);

Ответы>>859976

297 Кб, 300x199

19 Окт, 20:05 #122 #859976

>>859972

19 Окт, 22:43 #123 #860127

>>859747
Нужно больше кода.
1) Так не инжектят. Вставляют джамп, чтобы не затереть остальные фунции (и даже с джампом бывают проблемы). А ты пишешь 250 байт. Мало того, что ты наверняка затираешь дохуя всего, так ты еще тупо копируешь кусок своего кода в чужое адресное пространство.
2) Ты уверен, что твоя целевая функция - cdecl, а не stdcall?

>>859940
Используй школьную арифметику, Люк. Например: ((double) rand() / RAND_MAX) даст тебе случайное значение из промежутка 0..1, назовем его rnd. Ты можешь сделать start + (int) ((end - start + 1) * rnd). Или можешь сделать start + (rand() % (end - start + 1)), но распределение будет гораздо хуже, и работать это будет только если диапазон меньше RAND_MAX.

Ответы>>860490

20 Окт, 02:35 #124 #860336

Может быть, кто-то ещё не видел: “Arguing about Undefined Behavior” с CppCon 2016. Да, это про кресты, но код по большей ничем не отличается от сишного.

https://www.youtube.com/watch?v=yG1OZ69H_-o

Ответы>>860339>>860345>>860346

sage 20 Окт, 03:11 #125 #860339

>>860336
Вот ещё питушня про UB
https://www.youtube.com/watch?v=g7entxbQOCc

sage 20 Окт, 04:45 #126 #860345

>>860336
Неплохой доклад, да. Меня, как и докладчика, заебали эти идиотские заявления "при UB может произойти что угодно, например, отформатироваться твой диск" и т.п.

Ответы>>860346>>860348

sage 20 Окт, 04:51 #127 #860346

>>860336
>>860345
И да, эта петросянская шуточка про demons out of your nose. Не знаю, что больше раздражает. То ли сама шутка, то ли то, что с неё каждый раз все ржут.

sage 20 Окт, 04:56 #128 #860348

>>860345
> Меня, как и докладчика, заебали эти идиотские заявления "при UB может произойти что угодно"
Ну, например, обычный use after free может привести к очень интересным последствиям, особенно если программа работатает с файлами. Хотя сознательно компилятор ничего тереть не будет, конечно же.

20 Окт, 12:31 #129 #860490

>>860127
http://pastebin.com/xynv2ZaM

Я выделяю 511 в самом начале. Потом туда все записываю каждый раз и вызываю тред (так делает автор, я бы сделал по-другому, факт в том, что крашится пустая функция.
2. Не уверен.

да, там msvc, если что

Как бы ты заинъектил функцию, которая ничего не делает? Я думаю, что все-же в коде асм проблема, ибо делфипацаны так (почти так) инъектят уже много лет.

Ответы>>860958

20 Окт, 21:34 #130 #860958

>>860490
> PAGE_READWRITE
Где VirtualProtectEx(PAGE_EXECUTE_READ) после записи? Или или хотя бы PAGE_EXECUTE_READ_WRITE при аллокации.

Алсо, нет смысла выделять 511 байт (почему такая константа?). Минимальный размер страницы 4К, меньше 4К VirtualAlloc тебе не выделит в любом случае.

Алсо, ты бы ошибки обрабатывал, что ли. Может, у тебя вообще процесс не открывается, или что-то не пишется.

> CreateRemoteThread(..., m_injFunction, ...)
Функция должна быть stdcall. Ей передается один параметр, поэтому либо ты либо помечаешь ее как __stdcall (WINAPI, CALLBACK, PASCAL), либо не забываешь retn 4.

Алсо, отключаешь ли ты проверки стека (/GS, /RTC и т. п.) при компиляции? Потому что та же 2015 студия в отладочный билд втыкает call stack_check, даже в пустую функцию. А функцию stack_check ты не копируешь, и получается call вникуда. Посмотри дизасм, удостоверься, что все ок.

> Как бы ты заинъектил
> которая ничего не делает
Ничего не делающую функцию инжектить незачем. А что-то делающую - целой DLL-кой. По крайней мере, не нужно будет задумываться о других функциях и переменных и пытаться заставить компилятор собрать position-independent код без лишнего говна. Если есть античит, то все, конечно, не так просто.

Ответы>>861285

20 Окт, 21:43 #131 #860964

http://pastebin.com/fmHXYeef
Как сделать, что бы при делении на 0 в консоли выводилось не
inf, а "Деление на 0" например?
Cкорее всего, можно изи сделать через if, но я не понимаю как
Пытаюсь проверять через insinite но нихуя не получается
мимо месяц в программировании попалась самая сложная задачка в группе сдавать завтра утром

Ответы>>860967>>860986

20 Окт, 21:44 #132 #860967

isfinite*
>>860964
быстрофикс

20 Окт, 22:12 #133 #860986

Решил уже, через if и правда было слишком легко
>>860964

1 Кб, 458x34

20 Окт, 22:38 #134 #861002

На хую я вижуаловский копилятор вертел, блядь

Поясните, как без мозгоебства на винде на связке C+SDL писать/

Ответы>>861004

20 Окт, 22:42 #135 #861004

>>861002
Код покажи. Ты явно что-то очень странное делаешь.

Ответы>>861009

13 Кб, 593x205

20 Окт, 22:50 #136 #861009

>>861004

Ответы>>861021>>861056

20 Окт, 23:01 #137 #861021

>>861009
Ну оно же собирается без ошибок. А баги в проверке орфографиисинтаксиса у них часто, особенно когда с clang/c2 собираешь - компилируется ок, а ошибки подчеркивает. Там рядом с кнопочкой сворачивания окна можно тыкнуть и описать проблему. Сделай мир лучше.

sage 20 Окт, 23:19 #138 #861056

>>861009
Если очень раздражает, раздели декларацию структуры player и декларацию переменной player - оно перестанет ругаться. Судя по всему, во время определения переменной оно почему-то считает, что текущая структура struct player - анонимная, как бы странно это не звучало.

20 Окт, 23:25 #139 #861061

Объясните, где ошибся, уже который раз пытаюсь написать функцию перевода дробной части числа в другую систему счисления и нихуя не выходит, всегда какая-то ошибка, просто не понимаю, что я делаю не так.
http://ideone.com/CCzhlI (первая попытка),
http://ideone.com/isdbLH (вторая попытка).
На самом деле, попыток было гораздо больше, чем две.

Ответы>>861063>>861071

20 Окт, 23:30 #140 #861063

>>861061
Мне кажется, что эти нолики в результате пытаются рисунком передать какое-то послание.

20 Окт, 23:46 #141 #861071

>>861061
У тебя запятые в пользовательском вводе, а scanf() не ожидает их увидеть. Оставь только пробелы, и все заработает.

Ответы>>861081

21 Окт, 00:05 #142 #861081

>>861071
Спасибо, анон.
что-то я туплю на ровном месте

21 Окт, 00:16 #143 #861089

Сети и Си, что почитать?
Проблема: обмен пакетами между клиентом и сервером.
Нужно разобраться в вопросе как все устроено, и какие инструменты доступны в Си.

Ответы>>861092>>861097>>861159

21 Окт, 00:17 #144 #861092

>>861089
Попробуй википедию, потом, когда поймешь основы нагугли статейки или хабр. Там уже будешь иметь конкретные вопросы и список литературы.

31 Кб, 416x500

21 Окт, 00:23 #145 #861097

>>861089
Для обмена пакетами в Си, как и в других языках, используют сокеты. Если у тебя Windows, возьми что-то типа пикрелейтед. Если Linux - есть Cтивенс с его Unix Network Programming (его же TCP/IP Illustrated и для винды стоит почитать, чтобы понимать, как вообще сеть работает). Простые хелловорлды с блокирующими сокетами заработают с минимальными правками в любой ОС, а когда дело дойдет до неблокирующих сокетов - читай книжки, статьи, ну и маны, конечно.

Ответы>>861099>>861202

21 Окт, 00:25 #146 #861099

>>861097
> Если у тебя Windows, ставь Linux
Не благодари.

21 Окт, 03:05 #147 #861159

>>861089
Хз, то или нет о, вчера анон ссылкой кидался, а я схоронил

21 Окт, 03:06 #148 #861160

А ссыль то и позабыл
http://beej.us/guide/bgnet/

Ответы>>861202

21 Окт, 03:18 #149 #861161

Уна делла вопросо:
Читаю Hacking: The Art of Exploitation
Естественно, дизассемблированные листинги оче разные, у автора одни мнемоники идут, у меня другие. Как думаете, это компилятор оптимизирует, или оттого что компиляторы разных версий?

Ответы>>861162

21 Окт, 03:24 #150 #861162

>>861161
Показал бы хоть. Попробуй с -O0 компилировать, тогда компилятор точно не будет ничего оптимизировать.

Ответы>>861165

21 Окт, 03:37 #151 #861165

>>861162
Да, спасибо. Я думаю, это изза того что книга 2003 года, и в ней GCC version 3.3.6 используется. Я лучше погуглю как поставить две разные версии компилятора

Ответы>>861166

21 Окт, 03:38 #152 #861166

>>861165
Ставь сразу на виртуалку и остальной линукс тех лет. А то несколько тредов назад кто-то тут на ASLR напарывался с этой книгой.

Ответы>>861168

21 Окт, 03:57 #153 #861168

>>861166
Да, ты прав. Погуглил - только это и работает, приложенный iso надо использовать

Ответы>>861255>>861276

21 Окт, 09:50 #154 #861202

>>861160
>>861097

спасибо, то что нужно.
Причем второй коммент - вообще самый сок в сжатом виде по тому, что необходимо + там в конце учебника полно другой литературы которую бегло посмотрел, и меня заинтересовала так же. Спасибо.

21 Окт, 12:29 #155 #861255

>>861168
Довольно потно идет книжка, должен сказать, от адресов в глазах рядит лол

21 Окт, 13:23 #156 #861276

>>861168
>приложенный iso надо использовать
В той ебаной системе курсор мышки глючит.

Ответы>>861284

21 Окт, 13:35 #157 #861284

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

98 Кб, 1920x1080

21 Окт, 13:42 #158 #861285

>>860958
Было PAGE_WRITE, заменил на PAGE_EXECUTE_READWRITE
Какой смысл в VirtualProtectEx, мы аллоцировали память, про которую клиент не знает, получили все права и делаем что хотим.
Ошибки я обрабатываю, для теста я считываю значение ХП из клиента. А инъектирование возвращает успех. Мне нужно заинжектить не один раз, а делать это постоянно. Память аллоцируется при старте под все возможные функции и соотетствующим образом используется.

Тем не менее исправив твои замечание, свершилось чудо, которое я не мог узреть три года, пустая функция заинжекшена успешно без краша.
Разреши еще немного заебать парой вопросов:
1. Я попробовал инжектить более продвинутую функцию simpleF(). В дампе передо мной находится то, как msvc перепихнул simpleF() ? По какой причине в асм коде появилась строчка, которая вызывает краш? Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
2. Если предположить, что функция

MOV ESI, 0x007F4C80
CALL ESI

Должна попать два аргумента со стека, семантика верна, и краша не должно быть? всмысле ошбика уже в предугадывании характера функции, а не в коде ассемблера
3. ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами, на какое апи они триггерятся?
4. Автор статьи также предлагал более универсальный метод по инжекту - прямое записывание функции. Он бинарно копирует асм код из олли, и инжектит уже фиксированное количество байт для каждой функции

void Skill(DWORD id)
{
char fdata[39]="\x60\x6A\xFF\x6A\x00\x6A\x00\x68\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xFF\xD0\x61\xC3";

DWORD func=F_SKILL;
DWORD ba=BA;
DWORD dga=D_GA;
DWORD ps=PERS_STRUCT;

memcpy(fdata+8,&id,4);
memcpy(fdata+14,&ba,4);
memcpy(fdata+20,&dga,4);
memcpy(fdata+26,&ps,4);
memcpy(fdata+31,&func,4);
InjectFunction(fdata,39);
}

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

http://pastebin.com/ZWXYGJF0

98 Кб, 1920x1080

21 Окт, 13:42 #158 #861285

>>860958
Было PAGE_WRITE, заменил на PAGE_EXECUTE_READWRITE
Какой смысл в VirtualProtectEx, мы аллоцировали память, про которую клиент не знает, получили все права и делаем что хотим.
Ошибки я обрабатываю, для теста я считываю значение ХП из клиента. А инъектирование возвращает успех. Мне нужно заинжектить не один раз, а делать это постоянно. Память аллоцируется при старте под все возможные функции и соотетствующим образом используется.

Тем не менее исправив твои замечание, свершилось чудо, которое я не мог узреть три года, пустая функция заинжекшена успешно без краша.
Разреши еще немного заебать парой вопросов:
1. Я попробовал инжектить более продвинутую функцию simpleF(). В дампе передо мной находится то, как msvc перепихнул simpleF() ? По какой причине в асм коде появилась строчка, которая вызывает краш? Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
2. Если предположить, что функция

MOV ESI, 0x007F4C80
CALL ESI

Должна попать два аргумента со стека, семантика верна, и краша не должно быть? всмысле ошбика уже в предугадывании характера функции, а не в коде ассемблера
3. ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами, на какое апи они триггерятся?
4. Автор статьи также предлагал более универсальный метод по инжекту - прямое записывание функции. Он бинарно копирует асм код из олли, и инжектит уже фиксированное количество байт для каждой функции

void Skill(DWORD id)
{
char fdata[39]="\x60\x6A\xFF\x6A\x00\x6A\x00\x68\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\x8B\x89\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xFF\xD0\x61\xC3";

DWORD func=F_SKILL;
DWORD ba=BA;
DWORD dga=D_GA;
DWORD ps=PERS_STRUCT;

memcpy(fdata+8,&id,4);
memcpy(fdata+14,&ba,4);
memcpy(fdata+20,&dga,4);
memcpy(fdata+26,&ps,4);
memcpy(fdata+31,&func,4);
InjectFunction(fdata,39);
}

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

http://pastebin.com/ZWXYGJF0

Показать весь текст
Ответы>>861628

21 Окт, 15:12 #159 #861366

У меня есть библиотека .lib, написанная на ассемблере. Как написать к ней хедер на си, чтобы подключать в си-проектах? Основной тип данных в этой библиотеке - DWORD (unsigned long), в хедере я пишу что-то вроде:

#define DWORD unsigned long

DWORD func(DWORD arg);

Но когда я подключаю этот хедер к проекту, он не компилится: Undeclared identifier 'DWORD' (did you mean 'argv'?)
Undeclared function 'func

Что делать? Объявлять функции как extern? А с двордом что?

Ответы>>861628

21 Окт, 15:40 #160 #861398

Привожу свои попытки написать хедер (два кодеса в одной пасте): http://pastebin.com/HsNbAKXY

Мануал:

_BigCreate (dword)InitValue
[LIBcore.asm]
creates a bignum and initializes it with the value InitValue
returns a pointer to the bignum

_BigDestroy (big )Big
[LIBcore.asm]
destroys the bignum Big

_BigCopy (big )BigSrc, (big )BigDest
[LIBcore.asm]
copies BigSrc to BigDest

_BigCompare (big )BigA, (big )BigB
[LIBcore.asm]
compares BigA and BigB
returns 1 if BigA > BigB
0 if BigA = BigB
-1 if BigA < BigB

_BigCompare32 (big )BigA, (dword)Value
[LIBcore.asm]
compares BigA and Value
returns 1 if BigA > Value
0 if BigA = Value
-1 if BigA < Value

21 Окт, 15:40 #160 #861398

Привожу свои попытки написать хедер (два кодеса в одной пасте): http://pastebin.com/HsNbAKXY

Мануал:

_BigCreate (dword)InitValue
[LIBcore.asm]
creates a bignum and initializes it with the value InitValue
returns a pointer to the bignum

_BigDestroy (big )Big
[LIBcore.asm]
destroys the bignum Big

_BigCopy (big )BigSrc, (big )BigDest
[LIBcore.asm]
copies BigSrc to BigDest

_BigCompare (big )BigA, (big )BigB
[LIBcore.asm]
compares BigA and BigB
returns 1 if BigA > BigB
0 if BigA = BigB
-1 if BigA < BigB

_BigCompare32 (big )BigA, (dword)Value
[LIBcore.asm]
compares BigA and Value
returns 1 if BigA > Value
0 if BigA = Value
-1 if BigA < Value

Показать весь текст
Ответы>>861628

1437 21 Окт, 15:58 #161 #861414

Как задать размер массива переменной?

Ответы>>861416>>861516

21 Окт, 16:02 #162 #861416

>>861414

1437 21 Окт, 16:43 #163 #861449

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//=========функциязаполнениямассива=========
int RandVector(int size, int massiv, int max_rand)
{
srand(time(0));
//рандомизация – установка начального псевдослучайного числа
for (int i = 0; i< size; i++)
{
massiv = 1 + (rand() % max_rand);
//случайное число в диапазоне от 1 до 10
}
return 0;
}

//=========функция вывода массива на консоль=========
int PrintVector(int size, int massiv)
{
for (int i = 0; i< size; i++)
{
printf("%i ", massiv);
}
printf("\n");
return 0;
}
В чем ошибка?

1437 21 Окт, 16:43 #163 #861449

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//=========функциязаполнениямассива=========
int RandVector(int size, int massiv, int max_rand)
{
srand(time(0));
//рандомизация – установка начального псевдослучайного числа
for (int i = 0; i< size; i++)
{
massiv = 1 + (rand() % max_rand);
//случайное число в диапазоне от 1 до 10
}
return 0;
}

//=========функция вывода массива на консоль=========
int PrintVector(int size, int massiv)
{
for (int i = 0; i< size; i++)
{
printf("%i ", massiv);
}
printf("\n");
return 0;
}
В чем ошибка?

Показать весь текст
Ответы>>861628

21 Окт, 18:18 #164 #861516

>>861414
На стеке никак. Только в куче:
int count = 100500;
T ptr = malloc( sizeof(T) count );

Ответы>>861517>>861599

21 Окт, 18:21 #165 #861517

>>861516
парсер звездочки съел
http://pastebin.com/sM7h7FMp

21 Окт, 20:34 #166 #861599

>>861516
Ну вообще в C можно VLA

Но не нужно.

Ответы>>861812

21 Окт, 21:23 #167 #861628

>>861285
> какой смысл в VirtualProtectEx
Как альтернатива выделению с PAGE_EXECUTE_READWRITE. Выделилить read-write, записать, сделать execute-read. Дело вкуса, но это
> ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами
может снизить градус подозрительности у некоторых антивирусов. А возбуждаться могут даже на OpenProcess+WriteProcessMemory, там все сложно. Иногда и на хелловорлды ругаются. Даже не знаю, что предложить почитать. Васм закрылся, к сожалению.

> В дампе передо мной находится то, как msvc перепихнул simpleF() ?
В дампе код метода класса. Ты можешь легко вычислить методы по обращению к ECX без его предварительной инициализации. В ECX передается this.

> Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
Не понял вопроса.

> 0x007F4C80
> Должна попать два аргумента со стека
И указатель на объект в ECX.

> Так вот, такая поебота тоже вызывает целую цепочку функций, генерируемых компилятором, или же она прямо копирует все, как записано в чаре.
Тоже не совсем понял вопрос. Скопирует, как есть. Были внутри вызовы функций - никуда не денутся. Не было - не появятся.

>>861366
Ну у тебя все правильно, только не стоит объявлять псевдонимы дефайном, для этого есть typedef: typedef unsigned long myDWORD; И не стоит вообще делать тип DWORD, когда можно #include <stdint.h> и использовать uint32_t (если тебе нужен точный размер и 64-битной версии либы не предвидится).

>>861398
В пасте все должно компилироваться. Почему у тебя функции с подчеркиванием в начале? Алсо, extern писать не обязательно, функции по умолчанию и так extern.

>>861449
Если у тебя там massiv[i ] в обеих функциях, то не вижу ошибок. Или ты в PrintVector всегда печатаешь численное значение указателя? https://ideone.com/ позволяет, во-первых, запостить код, не распидорасив его [i ] и звездочками, а во-вторых, показать нам, что идет не так, раз уж тебе лень объяснить самому.

21 Окт, 21:23 #167 #861628

>>861285
> какой смысл в VirtualProtectEx
Как альтернатива выделению с PAGE_EXECUTE_READWRITE. Выделилить read-write, записать, сделать execute-read. Дело вкуса, но это
> ВНЕЗАПНО на вирустотале данный код уже помечен 5 антивирусами
может снизить градус подозрительности у некоторых антивирусов. А возбуждаться могут даже на OpenProcess+WriteProcessMemory, там все сложно. Иногда и на хелловорлды ругаются. Даже не знаю, что предложить почитать. Васм закрылся, к сожалению.

> В дампе передо мной находится то, как msvc перепихнул simpleF() ?
В дампе код метода класса. Ты можешь легко вычислить методы по обращению к ECX без его предварительной инициализации. В ECX передается this.

> Какого черта код сам забирает параметры, хотя это же должна делать по идее функция, которую мы вызовем?
Не понял вопроса.

> 0x007F4C80
> Должна попать два аргумента со стека
И указатель на объект в ECX.

> Так вот, такая поебота тоже вызывает целую цепочку функций, генерируемых компилятором, или же она прямо копирует все, как записано в чаре.
Тоже не совсем понял вопрос. Скопирует, как есть. Были внутри вызовы функций - никуда не денутся. Не было - не появятся.

>>861366
Ну у тебя все правильно, только не стоит объявлять псевдонимы дефайном, для этого есть typedef: typedef unsigned long myDWORD; И не стоит вообще делать тип DWORD, когда можно #include <stdint.h> и использовать uint32_t (если тебе нужен точный размер и 64-битной версии либы не предвидится).

>>861398
В пасте все должно компилироваться. Почему у тебя функции с подчеркиванием в начале? Алсо, extern писать не обязательно, функции по умолчанию и так extern.

>>861449
Если у тебя там massiv[i ] в обеих функциях, то не вижу ошибок. Или ты в PrintVector всегда печатаешь численное значение указателя? https://ideone.com/ позволяет, во-первых, запостить код, не распидорасив его [i ] и звездочками, а во-вторых, показать нам, что идет не так, раз уж тебе лень объяснить самому.

Показать весь текст
Ответы>>861694>>861705

22 Окт, 00:25 #168 #861694

>>861628
>Васм закрылся, к сожалению
А базу статей/примеров/постов форума админы не выкладывали?

Ответы>>861702

22 Окт, 01:02 #169 #861702

>>861694
Хуй знает. Существуют .chm со статьями и примерами, но я имел в виду форум и живых людей.

Ответы>>861707

22 Окт, 01:23 #170 #861705

>>861628
> Васм закрылся, к сожалению.
Это да, к большому сожалению. Теперь толпы школохацкеров-дегенератов разбежались повсюду и засирают всё своими хуками и прочим говном.

Ответы>>861706>>861876

sage 22 Окт, 01:26 #171 #861706

>>861705
Не припомню на васме прямо таких уж толп школьников с читами и хуками. Вот срач и политоту в хипе - помню, это да. И еще помню профи, которые могли ответить на любой вопрос.

22 Окт, 01:28 #172 #861707

>>861702
tparser находит chm-ку только от 2004го года, которая немного устарела.

Ответы>>861712

22 Окт, 01:47 #173 #861712

>>861707
http://rutrackermirror.org/torrent-62156.html (2006)
http://rgho.st/6Z7bNy4PC 2ch (2007)
Еще на вебархиве есть многое.

Ответы>>861714>>868086

22 Окт, 01:58 #174 #861714

>>861712
О, спасибо, совсем забыл про вебархив. А были же дампы года 2012-14го, или мне кажется?

Ответы>>861715

sage 22 Окт, 02:05 #175 #861715

>>861714
Хуй знает. Наверняка где-то и полный дамп продается с прошлого взлома.

22 Окт, 04:03 #176 #861733

Ананасы, срочно, решительно нужна добрая душа, которая забилдит древнюю libSDL https://www.libsdl.org/download-1.2.php под win32.

Ответы>>861741

22 Окт, 04:33 #177 #861741

>>861733
Чем тебя не устроили готовые билды?

22 Окт, 13:10 #178 #861812

>>861599
Я вообще не понимаю, нахуя эту поебень добавили в стандарт. Кто вообще в здравом уме будет добровольно размещать массивы произвольного размера на стеке?

Ответы>>862051

22 Окт, 15:30 #179 #861864

Сап двач, программа не проходит так, как хотелось бы, в чем дело?
код - http://pastebin.ru/eSs1eT0W
задание 27 - https://pp.vk.me/c637825/v637825283/1af5c/Km9rz5QQ4Cw.jpg

Ответы>>862058

22 Окт, 16:12 #180 #861876

>>861705
Поставил тебе хук за щеку, проверяй.

Ответы>>861903>>862041

22 Окт, 17:08 #181 #861903

>>861876
Школохацкер-дегенерат, надо полагать?

22 Окт, 21:29 #182 #862041

>>861876
Проверил, крашнулось с ошибкой 0xc0000005

7 Кб, 583x107

22 Окт, 21:38 #183 #862050

>>856777 (OP)
Щас буду делать "первую программу". Знаний по с ноль, аноны я долго будут с этим ебаться, если всю инфу буду черпать с учебника?

Ответы>>862051

22 Окт, 21:45 #184 #862051

>>861812
Расскажи, чем код: int length = 100; int array[length]; принципиально отличается от int array[100000]; int length = 100; (ну кроме считающегося в рантайме sizeof и проблем оптимизации)?

>>862050
Если ты формулу понимаешь, и на си не писал вообще, то провозишься пару часов, наверное.

Ответы>>862196

36 Кб, 877x515

22 Окт, 21:47 #185 #862052

Блять, хочу запилить RSA для шифрования сессионного ключа блочного шифра. Очень хочется, чтобы ключ шифрования был 0xDEADFADE, но не получается сделать так, чтобы это число было обратимо по модулю функции Эйлера. Хуле так сложно подобрать параметры?

22 Окт, 21:55 #186 #862058

>>861864
> программа не проходит так, как хотелось бы, в чем дело?
В строках 28-43 после совпадения одного из условий ты проваливаешься в проверку следующего, и получается, что ты считываешь с середины символа, а потом на следующей итерации опять с середины и т. д. Свяжи if-ы через else или воткни continue после каждого printf, выводящего символ.

23 Окт, 01:49 #187 #862196

>>862051
> принципиально отличается
Тем, что с первым у тебя будет просто переполнение стека и сегфолт, а со вторым еще в придачу и выполнение произвольного кода через подмену адреса возврата.

Ответы>>862202>>862235

23 Окт, 02:22 #188 #862202

>>862196
> подмену адреса возврата
Ну во-первых, это уже малоактуально - компиляторы давно умеют детектить порчу стека. Во-вторых, это аргумент за VLA, но какой-то хуевый, потому что проверка запрошенного размера массива нужна в обоих случаях, и в обоих случаях она одинаковая.

Ответы>>862235

23 Окт, 06:11 #189 #862235

>>862196
>>862202
> со вторым еще в придачу и выполнение произвольного кода через подмену адреса возврата
Ну вот тебе подмена адреса возврата с VLA: http://ideone.com/M8agh6 Алсо, сможешь без отладчика пояснить, как работает magic()? Алсо, по техническим причинам это не сработает в Windows, вне зависимости от использованного компилятора.

Ответы>>862237

23 Окт, 07:53 #190 #862237

>>862235
Ваш компилятор слишком тупой и неправильно выделяет память под массив. Если запросить у него пару мегабайт места на стеке, то на винде всё просто упадёт.
>как работает magic()
Никак не работает.

Ответы>>862239

sage 23 Окт, 08:00 #191 #862239

>>862237
> Ваш компилятор слишком тупой и неправильно выделяет
Ваш - это чей? А как правильно выделять? На самом деле там ни единой страницы не выделяется - все уже выделено.

> Никак не работает.
Если она не работает, как тогда сообщение печатается? Закомментируй вызов magic() - не будет сообщения.

Ответы>>862240

23 Окт, 08:27 #192 #862240

>>862239
Она нужна всего лишь, чтобы адрес evil затолкался на стек. Возможно, это можно сделать с локальными переменными (или даже просто в массив записать) - мне лень сейчас в голове проворачивать, как оно там выделяется и работает. Сама функция ничего не делает.
>А как правильно выделять?
Явно не sub esp, xxx. Это, в общем, ещё один специализированный инструмент по отстрелу ног. Накой нужна фича с такой-то реализацией?

Ответы>>862249

sage 23 Окт, 09:42 #193 #862249

>>862240
> Накой нужна фича с такой-то реализацией?
Но ты ведь понимаешь, что VLA ценны только потому, что они "бесплатные"? Если аллокация массива будет сложнее, чем sub esp,nnn - такая фича будет никому не нужна, потому что тогда проще выделить массив фиксированного размера или сделать malloc(). Собственно я и начал весь этот ээ... разговор, пытаясь доказать, что массивы фиксированного размера ничем не хуже.

23 Окт, 17:29 #194 #862467

У функции ReadFile есть ограничение на размер буфера? Почему зашифрованный RSA-блок размером 146 16-ричных цифр не считывается целиком моим кодом?

ZeroMemory(rsa_block, RSA_BLOCK_SIZE);
ReadFile(hEncryptedFile, rsa_block, RSA_BLOCK_SIZE, &dwBytesRead, NULL);
RSASetup(&rsa);
RSADecrypt(&rsa, rsa_block, RSA_BLOCK_SIZE, key);
RSAClear(&rsa);

Ответы>>862586

23 Окт, 19:39 #195 #862523

В общем реквестирую какой-нибудь не очень большой материал для повторения по С++. Потому как 2 года до этого писал на С++, сейчас пишу на Objective-C(пришлось временно перейти из-за нехватки проектов, а потом на работе С++ отдел развалился) и хочу перейти на другую работу чтобы писать на С++. И каждый раз на собеседованиях сталкваюсь с проблемами связанными с тем что на С++ давно не писал и то не помню как инициализировать char * строки и какая библиотека нужна чтобы использовать функции strcpy и strlen, то не помню как определять шаблоны, то не помню как определять операторы. Нет, начни я кодить - сразу бы загуглил, но вот с ходу вспомнить не всегда могу.

Ответы>>862534

Какашечка 23 Окт, 20:08 #196 #862534

>>862523
эплоблядь, ты заебал со своими реквестами, тебе на топики похуй? или привык через жопу все. пиздуй к плюсанам.

Ответы>>862535

23 Окт, 20:13 #197 #862535

>>862534
Извиняюсь. Я просто тред плюсов и си перепутал.

23 Окт, 21:46 #198 #862586

>>862467
Возможно, RSA_BLOCK_SIZE у тебя в байтах, а блок текстом? И вообще, где возвращаемое значение ReadFile, где GetLastError?

Ответы>>862653

23 Окт, 22:54 #199 #862653

>>862586
>RSA_BLOCK_SIZE у тебя в байтах, а блок текстом
RSA_BLOCK_SIZE равен логарифму по основанию 16 от модуля RSA, т.е. максимальную длину 16-ричного числа по этому модулю.

Я хочу сохранять в заголовке файла 16-ричные числа как текст, читать их оттуда как текст и расшифровывать, потому что моя либа это позволяет делать.

Ответы>>862659

23 Окт, 23:00 #200 #862659

>>862653
Хм, помогло увеличение RSA_BLOCK_SIZE на единицу. Я немного проебался с логарифмом. Тестовая программа нормально работает.

23 Окт, 23:05 #201 #862661

Алсо, насколько важно в системном коде проверять коды возврата? Они помогают избежать неопределенного поведения при ошибке, но здорово раздувают размер кода.

Ответы>>862664

23 Окт, 23:12 #202 #862664

>>862661
настолько, насколько тебе важна стабильная работы программы

24 Окт, 04:59 #203 #862766

https://www.youtube.com/watch?v=MUNRvqpske0 вдрух кому интересно

24 Окт, 06:27 #204 #862774

Пиздос, читаю Прату. Глава про указатели и многомерные массивы. Вот прочитал - как будто не читал вовсе.

Ответы>>862779

24 Окт, 07:50 #205 #862779

>>862774
Бумажка с ручкой тебе поможет. Зарисовывай. Ну и отладчиком тоже смотри.

24 Окт, 13:57 #206 #862865

Как на WinAPI узнать расширение файла и проверить его на соответствие всем возможным расширениям из списка? Выглядит как пердолинг.

Ответы>>862867>>862868

24 Окт, 14:03 #207 #862867

>>862865
Как на WinAPI найти сумму элементов на чётных позициях в массиве?
Вот точно так же.

Ответы>>862870

24 Окт, 14:03 #208 #862868

>>862865
PathFindExtension, а на соответствие - это ты как-нибудь сам. С маленьким списком и цикл ок, с большим изобрети хэшик какой-нибудь. Но судя по
> Как на WinAPI
ты тот самый пидор, который пишет криптолокер.

sage 24 Окт, 14:06 #209 #862870

>>862867
Ну, учитывая многобразие поддерживаемых форматов путей в Windows, а также то, что расширения у файла может не оказаться, решения типа strrchr(..., '.') - это не самый правильнный выход, лучше обращаться к уже отлаженной функции ОС.

25 Окт, 06:56 #210 #863253

Няхи, читал ктонибудь? Как вам?
https://www.crcpress.com/X86-Assembly-Language-and-C-Fundamentals/Cavanagh/p/book/9781466568242

Ответы>>863262>>863263

sage 25 Окт, 08:12 #211 #863262

>>863253
Содержание выглядит как пересказ интеловского мануала.

25 Окт, 08:39 #212 #863263

>>863253
ода из миллиарда подобных

по асму читай тома свана, однозначно

Ответы>>863322

Какашечка 25 Окт, 10:11 #213 #863286

Встретил слово 'tuple' в алгоритме работы со списком. Это еще че за хуйня? Понятно, что имеют ввиду элемент списка, но в чем семантическое отличие от 'node'?

25 Окт, 12:56 #214 #863322

>>863263
Блин, книга то древняя Тасм, дос. Хотя пишут что написана суперски.

Ответы>>863381

Какашечка 25 Окт, 15:14 #215 #863381

>>863322
ого, а ты сразу на винапи хочешь вкатится, силен хули.

Ответы>>863388

25 Окт, 15:27 #216 #863388

>>863381
Да нет же!Нет!

Ответы>>863397

Какашечка 25 Окт, 15:46 #217 #863397

>>863388
ты же понимаешь, что асм под винду и асм под никс и асм под железо на одной платформе схожи только синтаксисом и то невсегда. асм под арм и асм под 86 отличны в синтаксисе. учи хаскел.

Ответы>>863405

25 Окт, 15:53 #218 #863405

>>863397
Все ассемблеры одинаковы. Если знаешь один-два, следующий учится за вечер.

25 Окт, 17:33 #219 #863454

анон, что я делаю не так? чому не работает?
http://rgho.st/69DgdmLqt

Ответы>>863456>>863458

Какашечка 25 Окт, 17:45 #220 #863456

>>863454
а ты хитрюша, ссу тебе в ротешник.

25 Окт, 17:54 #221 #863458

>>863454
> printf("Wrong");
> system("cls");
У меня от тебя ZEN ENGINEERING.

Ответы>>863460

25 Окт, 17:59 #222 #863460

>>863458
Ну на тролль дауна пожалуйста.
Вставлю паузу сюда, но ведь работать не начнёт.

Ответы>>863462>>863465

25 Окт, 18:01 #223 #863462

>>863460
Блядь, ну ты нормальный вообще? Ты выводишь сообщение, потом очищаешь экран. А потом выходишь из функции, а потом из программы. Убери нахуй все свои cls.

sage 25 Окт, 18:06 #224 #863465

>>863460
Алсо, ты в game() break в switch забыл запомни правило, чтобы не ошибаться с break, у тебя в каждом case должен быть break;, кроме случаев, когда каждый case состоит из простого выражения и return. В menu() тоже воткни везде break, иначе поправишь код и опять напорешься. Алсо, сделай что-нибудь со своей рекурсией - погугли game loop.

25 Окт, 19:16 #225 #863503

Привет снова, программисты. Студент-даун снова нуждается в помощи. Объясните, какого хуя опять ошибку выдает? http://ideone.com/isdbLH

Ответы>>863507

25 Окт, 19:30 #226 #863507

>>863503
1) accuracy не должен превышать sizeof(k) - 1;
2) В строке 39 завершающий ноль нужно писать по k[ i ], а не по k[i+1] - после записи очередной цифры ты уже делаешь i++, и получается, что после выхода из цикла k[ i ] - это первый незанятый элемент строки.
3) И главное, ты не инициализируешь переменную i, и она может быть равна чему угодно. Если у тебя нет компилятора, которому можно сказать -Wall, то хотя бы выбери на ideone язык не C, а C99 Strict, и будешь видеть предупреждения.

Ответы>>863509

25 Окт, 19:39 #227 #863509

>>863507
Спасибо, изменил accuracy, все заработало, а i у меня была объявлена перед циклом while.

Ответы>>863511

25 Окт, 19:41 #228 #863511

>>863509
У тебя i объявлена, но не инициализирована (ей не присвоено значение до ее использования). Если по счастливой случайности сейчас она у тебя оказывается равна 0, это не значит, что так будет в дальнейшем.

Ответы>>863592

25 Окт, 22:23 #229 #863592

>>863511
Действительно, забыл. Мой косяк. Спасибо еще раз.

25 Окт, 23:33 #230 #863632

До сих пор использую сишку, чтобы крестоносцы не заругали за неправильные паттерны. Иногда порываюсь написать что-то на крестах, но потом все равно переписываю на сишке. Кресты - это секта. Начиная с вектора вместо массива. Я бы понял, если бы в векторе была специальная индексация, которая позволяет быстро вставить блок в середину здоровенного вектора и одновременно быстро извлекать элементы по индексу. А так, простите господа паттернопоклонники, я атеист.

Ответы>>863638

25 Окт, 23:37 #231 #863638

>>863632
Кресты - это шаблоны, дурачок.
Начиная с определенного момента без них становится очень хуево. Структуры вместо классов, например, и прочая няшнота - why not, а без шаблонов - совсем никак.

Ответы>>863643

25 Окт, 23:40 #232 #863643

>>863638
>Начиная с определенного момента без Иисуса становится очень хуево, дурачок
Из-за шаблонов приходится держать код в хедерах, или уже что-то придумали? Потом, ебанутое именование символов в модулях. Из-за этого у старинной сишки РЕФЛЕКТИВНОСТЬ лучше, чем у крестов.

Ответы>>863644>>863647

25 Окт, 23:41 #233 #863644

>>863643
Зато из-за отсутствия шаблонов в сишечке ты вынужден либо изобретать qsort каждый раз, либо сосать по сравнению с крестами из-за колбека на каждый элемент.

Ответы>>863657

25 Окт, 23:48 #234 #863647

>>863643
>Из-за шаблонов
И правда дурачок - или ребенок просто.
Задача: реализовать класс/структуру для инт/флоат/дабл/хуйпизда.
Ты можешь, конечно, набойлерплейтить все комбинации - если совсем дебил наиболее вероятный вариант
Или можно пропердолиться дефайнами по взрослому, без носков. На самом деле вариант - только проблема в том, что они глобальны. То есть придется велосипедить свой неймспейс.
Детский сад, вобщем.

Ответы>>863648>>863657

sage 25 Окт, 23:50 #235 #863648

>>863647
Так ты предлагаешь реализовывать свой забагованный qsort в каждом проекте, я правильно понял?

Ответы>>863670

25 Окт, 23:54 #236 #863657

>>863647
>Задача: реализовать класс/структуру для инт/флоат/дабл/хуйпизда.
Это сделано во всех интерпах с динамическими типами и почти во всех почему-то не на крестах. Дурачки делали, вероятно.

>>863644
Почему, берешь какую-нибудь либу с qsort, указатели на функции все решают. Потом, в сишечке можно определить адрес (сорян, матерное слово для крестоносцев) структуры по ее элементу, эта хуйня даже в ядре линупса используется, и сам пользовался сколько раз.

Ответы>>863662>>863663

sage 25 Окт, 23:57 #237 #863662

>>863657
> указатели на функции все решают
А в крестах у метода, сравнивающего элементы есть все шансы заинлайниться. О том и речь.

Ответы>>863668

25 Окт, 23:58 #238 #863663

>>863657
>с динамическими типами
Тебе в JS - это твое.
>динамическими типами
>Дурачки делали
Что очевидно.

Ответы>>863668

26 Окт, 00:07 #239 #863668

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

>>863663
>Тебе в JS
Кресты и есть нечто гомеоморфное JS. Их прототипы не лучше ваших паттернов.

Ответы>>863671>>863672

26 Окт, 00:08 #240 #863670

>>863648
>реализовывать свой забагованный qsort
Ты нить потерял, дебиленок.
Крестопараша, конечно, говно омерзительное - но иногда няшная хуже. Когда шаблоны нужны, например.
Старенькая она уже.

26 Окт, 00:10 #241 #863671

>>863668
> Во-первых, не у метода, а у класса
Мне похуй, что там в парадигме. Инлайнится конкретный метод.
> Современные компилеры оптимизируют рекурсию.
А это-то тут каким местом?

Ответы>>863673>>863675

26 Окт, 00:12 #242 #863672

>>863668
>есть нечто гомеоморфное JS
Высеры с *воид твоих собратьев по, хаха, "разуму" - это точно жс, по уровню дегенерации.
Проебать контроль типов, огрести оверхед на своих же костылях - и обосраться по быстродействию даже по сравнению с крестопарашей.
Няшная не для дебилов вроде тебя, вобщем.

26 Окт, 00:13 #243 #863673

>>863671
>Инлайнится конкретный метод.
Функции еще лучше инлайнятся.
>> Современные компилеры оптимизируют рекурсию.
>А это-то тут каким местом?
Тем же самым. Вместо call получается jmp или инлайн.

Ответы>>863676>>863677

26 Окт, 00:16 #244 #863675

>>863671
>А это-то тут каким местом?
Не обращай внимания, просто он инфантильный дурачок почти как ты

26 Окт, 00:16 #245 #863676

>>863673
> Функции еще лучше инлайнятся.
Когда дело доходит до инлайна, отличий между методом и функцией нет вообще.
> Вместо call получается jmp или инлайн.
Не получается. qsort() в либе, в середину скомпиленной функции тебе никто jmp втыкать не будет. И вообще компиляторы вызов функций по указателям оптимизируют крайне неохотно.

Ответы>>863678>>863680

26 Окт, 00:17 #246 #863677

>>863673
> >указатели на функции
>Вместо call получается jmp или инлайн.
https://www.youtube.com/watch?v=uB4zwhvaKLE

Ответы>>863680

26 Окт, 00:20 #247 #863678

>>863676
>компиляторы вызов функций по указателям оптимизируют крайне неохотно.
>вызов функций по указателям оптимизируют
То есть все-таки могут заинлайнится, правда?
Да уж, ну и дебилы. А я-то думал тупее чем на хабре не бывает, наивный.

Ответы>>863687

26 Окт, 00:23 #248 #863680

>>863676
>в середину скомпиленной функции
Можно взять нескомпиленную. Как в крестах прямо.

>>863677
Это ты там выше подорвался? Ничего, Чудское Озеро охладит твой зад.

Ответы>>863684

26 Окт, 00:26 #249 #863684

>>863680
Фиксирую отсутствие возражений.
То есть указатели на функции и у этого дегенерата инлайнятся.
Все же большой минус няшной - в комьюнити у крестопараши таких дебилов уровня /бэ все же меньше.

Ответы>>863691

26 Окт, 00:28 #250 #863687

>>863678
Да, gcc это оптимизирует, если у него есть в наличии код функции.

Ответы>>863693

26 Окт, 00:30 #251 #863691

>>863684
Да, господин дегенерат. Они правда инлайнятся, если компилеру известен исходный кот qsort и исходный кот функции сравнения.

Ответы>>863694

26 Окт, 00:33 #252 #863693

>>863687
>gcc это оптимизирует
Пример, пожалуйста.
Указатель на функцию - это, в общем случае, переменная - иначе смысла во всем этом нет.
И знать на какую именно функцию там ссылка компилятор - в хотя бы немного осмысленных случаях - не может.
хелло_лаба1.с не учитываю, конечно.

Ответы>>863696>>863718

26 Окт, 00:34 #253 #863694

>>863691
То есть если ссылка - это константа, по сути.
лаба1, как и было сказано.

Ответы>>863697

26 Окт, 00:35 #254 #863696

>>863693
>Пример, пожалуйста.
То есть результат транслейтинга в ассемблер? Извини, лень что-то.

Ответы>>863698

26 Окт, 00:36 #255 #863697

>>863694
А в крестах что, инлайнится код, полученный из интернета?

Ответы>>863700

26 Окт, 00:37 #256 #863698

>>863696
Маневр номер очередной засчитан.
То есть исходника в качестве примера у тебя нет.
Все ясно.

Ответы>>863702

26 Окт, 00:40 #257 #863700

>>863697
>в крестах что, инлайнится код
Шаблонных классов, например.
То есть можно более-менее генерики с контролем типов и оптимизацией - в том числе инлайнами где надо.
Без позорища с *воид и прочей школопарашей уровня /бэ.

Ответы>>863704

26 Окт, 00:42 #258 #863702

>>863698
То есть ты из исходника собирался определять, объединяет ли gcc код двух функций, исходники которых ему известны, когда одна передается указателем в другую?

Ответы>>863703

26 Окт, 00:44 #259 #863703

>>863702
>ты из исходника собирался определять
Не вижу проблем прогнать гцц и немного подебажить.
Это не так страшно как ты думаешь, не бойся за меня :3

Ответы>>863707

26 Окт, 00:45 #260 #863704

>>863700
А в сишечке инлайнится код функций нормально. Это практически та же ситуация, только проще - без таблицы виртуальных функций.

Ответы>>863711

26 Окт, 00:46 #261 #863707

>>863703
Тогда DIY с -O3 просто.

Ответы>>863710

26 Окт, 00:48 #262 #863710

>>863707
Маневр номер очередной+1 засчитан.
То есть исходника у тебя нет - да и быть не может, что ты вроде бы уже понял.
Хотя может и нет - неисповедимы пути дебилов уровня /бэ.

Ответы>>863714

26 Окт, 00:49 #263 #863711

>>863704
> >генерики
>в сишечке
>Это практически та же ситуация
Тебе лучше попробовать 1с.
Там все твои друзья.

Ответы>>863715

26 Окт, 00:51 #264 #863714

>>863710
Извини, конечно, но по большому счету ты утверждаешь, что компилер заинлайнит метод, но с функцией обосрется.

Ответы>>863718

26 Окт, 00:52 #265 #863715

>>863711
Попробуй JS.

Ответы>>863718

26 Окт, 01:00 #266 #863716

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

Ответы>>863721

26 Окт, 01:02 #267 #863717

test

26 Окт, 01:05 #268 #863718

>>863715
>сам дурак
Ясно.
>>863714
А, понятно - с памятью проблемы и вообще.
>>863693
>Указатель на функцию
Хотя стыдно, конечно - нехорошо смеяться над больными людьми.

Ответы>>863722

26 Окт, 01:15 #269 #863721

>>863716
Что ты несёшь, поехавшее?

Ответы>>863723

26 Окт, 01:17 #270 #863722

>>863718
>и вообще
Что сказать хотел?

Ответы>>863723

26 Окт, 01:22 #271 #863723

>>863721
Такое же как ты, в точности.
>>863722
Читать это существо тоже не умеет, фиксирую признание.

Ответы>>863726>>863833

26 Окт, 01:27 #272 #863726

>>863723
>Читать это существо тоже не умеет
Скорее gcc не сумеет в инлайн метода, чем в инлайн функции :3

Ответы>>863785

26 Окт, 08:44 #273 #863785

>>863726
Дебил натуральный.
Вся ваша проблема в непонимании других.
И не потому что другие дебилы - хотя правило 95% работает всегда, да - а потому что дебилы с отставанием в развитии всего - это вы все, двачеры.
Совсем как маил.ру.

Ответы>>863817

26 Окт, 10:15 #274 #863817

>>863785
Найс, бомбануло:3

Ответы>>863830

26 Окт, 10:51 #275 #863830

>>863817
>бомбануло
Ну так зашивайся, няша.
И держи нас в курсе.

26 Окт, 10:55 #276 #863833

>>863723
>Такое же как ты, в точности.
Я вообще другой анон, но так и не понял хуиты про паттерны и кроссплатформу: на сях так не пишут?

Ответы>>863839

26 Окт, 10:59 #277 #863839

>>863833
>на сях так не пишут?
Няшная не для всяких извращений.
Хотя крос можно напердолить дефайнами, конечно.

Ответы>>863843

26 Окт, 11:01 #278 #863843

>>863839
Кроссплатформа на плюсах пердолится точно так же как на говняшной. Про паттерны — посмотри ядро линукса или хотя бы GTK.

Ответы>>863847

26 Окт, 11:04 #279 #863847

>>863843
>посмотри ядро линукса
Лучше бы ты гомонегров в говне запостил, няша.

26 Окт, 12:30 #280 #863870

Сап сипипач. Посоветуйте легкую, но хорошую IDE для C++ под Windows. Хочу, чтоб:
1. Быстро открывалась, без модулей sql, git и прочего лишнего. Кодить буду только cpp и winapi.
2. Был нормальный функционал для опытного пограммера. Подсветка, автокомплит, рефакторинг, find usage, goto defination and declaration и т.п.
3. Не нужно ебаться с привязкой компиляторов. Чтоб всё шло из коробки.

Т.е. не Visual Studio (пункт1), не sublime+gcc (пункт2), не Eclipse (пункт3).
Видел кучи рекомендаций CodeBlocks, QtCreator, DevCpp и т.д. - куча, какой наиболее подходит под мои требования?

Ответы>>863874

26 Окт, 12:48 #281 #863874

>>863870
dev-c++
Говнище жуткое, очень нравится.

1437 26 Окт, 19:18 #282 #864095

Подскажите как определить максимальное из чисел, встречающихся в заданном массиве более одного раза

Ответы>>864108

26 Окт, 19:41 #283 #864108

>>864095
1. Отсортировать массив
2. ???
3. Profit!

26 Окт, 21:29 #284 #864180

Поясните за битмаски. Нахуя их суют в каждую жопу? Или код вида
int hui = hui1 | hui2;
if((hui & (hui1 | hui2) == (hui1 | hui2))
может быть быстрее кода типа
int hui = 1;
if(hui)
Так какого хуя-то?

Ответы>>864184

26 Окт, 21:36 #285 #864184

>>864180
Экономия места (в сетевых протоколах вполне оправдано), возможность проверить несколько флагов одновременно, удобство (назначить 20 флагов маской через | проще, чем писать 20 присваиваний). Алсо, if((hui & (FLAG1 | FLAG2) == (FLAG1 | FLAG2)) всего лишь на одну инструкцию длиннее, чем if (hui1), а гораздо более частый вариант с одной маской if (hu1 & FLAG1) и вовсе ничем от if (hui1) не отличается с точки зрения количества инструкций на самом деле от платформы зависит, но на x86 разницы нет.

26 Окт, 23:01 #286 #864261

Допустим, у меня есть некий абстрактный класс, от которого идут наследники. У всех этих наследников есть одинаковые поля, но в каждом классе у них должны быть разные значения, например, максимальное количество здоровья.
Как лучше это реализовать? Объявить поля в базовом классе, а в наследниках присваивать им значения в конструкторе? Или можно как-то более красиво?

Ответы>>864275>>864336

26 Окт, 23:48 #287 #864275

>>864261
1) Это не крестотред;
2) Если не хочешь анальных трещин от архитектуры до рантайма — не суй, блядь, данные в родительский класс. Интерфейс должен обеспечивать только методы т.е. в твоём случае можно объявить в род. классе virtual int max_hp() а в наследниках просто возвращать константу int max_hp() override { return 100; }.

Ответы>>864277>>864371

26 Окт, 23:50 #288 #864277

>>864275
Это не крестотред, но
> override
что это, блять? Им мало было overload в 90х?

Ответы>>864285

27 Окт, 00:02 #289 #864285

>>864277
Это хуитка из жявы, не дающая стрелять в ногу реализовать метод которого нет в интерфейсе (например, ты совсем валет и вместо size_t написал unsigned int аргумент — без этой хуиты такой код компилировался везде молча, но при попытке дёрнуть виртуальный метод на платформе где size_t != uint всё бы жутчайшим образом распидорасило на пустом месте).

27 Окт, 06:49 #290 #864336

>>864261
Крестоеб уходи!

Какашечка 27 Окт, 08:22 #291 #864362

Котаны, как получить время с 00:00:00 UTC on 1 January 1970?

Ответы>>864363>>864364>>867024

27 Окт, 08:24 #292 #864363

>>864362
* timestamp, бистрафик

27 Окт, 08:26 #293 #864364

>>864362
#include <time.h> time(NULL).

Ответы>>864365

27 Окт, 08:28 #294 #864365

>>864364
пасиб

27 Окт, 09:05 #295 #864371

>>864275
А если надо не чисто асбтрактный класс, а как шаблон, который делал бы почти всё, а наследникам надо только переопределить некоторые (по усмтотрению) методы, ну и поля?

27 Окт, 09:33 #296 #864376

Посоны, в K&R их стандарт, не ANSI?

Ответы>>864378

27 Окт, 09:35 #297 #864378

>>864376
Во втором K&R уже ANSI.

27 Окт, 13:03 #298 #864487

Зачем кулхацкеры, которые пишут на си всякие парсилки PEB, оборачивают ассемблерные вставки в функцию _declspec(naked)? Чем так мешает пролог?

Ответы>>864500

27 Окт, 13:18 #299 #864500

>>864487
Тем, что пидорасит регистры и стек, что не всегда нужно когда надо например вставить свою хуитку в чужой код.

Перейти из скриптовых в С/С++ за полгода 27 Окт, 13:55 #300 #864539

привет, ребята. Ситуация такая.
В универе выбрал не ту дорожку (не имел представления о мире программирования вообще) и пошел по пути веб-программирования, джава спринг и прочее. За год работы в конторе ужасно непонравилось, ушел в скриптинг на питоне/руби. Сейчас все еще думаю о том, чтобы перейти в с++, начал читать сначала С керигана ричи, смотреть лекции Линского, потом планирую какую нибудь книгу по с++. На все про все даю себе полгода до уровня Junior. В универе изучал С++ но, как уже сказал, выбрал не ту дорогу. Как думаете, аноны, реально ли до уровня уверенного джуна за полгода подняться? В программировании, структурах данных и алгоритмах минимально разбираюсь, в универе нормально решал. Спасибо.

Ответы>>864544>>864558

27 Окт, 13:58 #301 #864544

>>864539
Нет.

Ответы>>864547

27 Окт, 14:01 #302 #864547

>>864544
хуево, а реальных цифр не подкинете? Год-два?

Ответы>>864551>>864556

27 Окт, 14:06 #303 #864551

>>864547
>Год-два?
Если начинать с правильного возраста.
Тебе уже поздно, ты уже веб-дебил.
Твой мозг искалечен.

Ответы>>864555

27 Окт, 14:13 #304 #864555

>>864551
ну понятно.

27 Окт, 14:13 #305 #864556

>>864547
Можно за год выучить и сишечку, и кресты до хуевого, но приемлемого уровня. Только надо въябывать, а не спрашивать на форумах для девочек-анимешниц, получится ли у тебя.

Ответы>>864561

27 Окт, 14:19 #306 #864558

>>864539
Приплюснутые как евреи, у ник ОП-стихоплет ушел, и они лишились родины, теперь кочуют туда сюда балмошаться без ума-толку

Ответы>>864560

27 Окт, 14:21 #307 #864560

>>864558
понял

27 Окт, 14:22 #308 #864561

>>864556
просто хотел оценку от опытных людей. Спасибо.

Ответы>>864984

27 Окт, 14:58 #309 #864575

Почему приянто мешать си и плюсы в одну колею (я про эти все c/c++, говорим си подразумеваем плючы и наоборот, вот это вот все). Это же разные языки. Плюсы вообще жутко перегруженное чудовище. Это ведь все равно что писать java/javascript общего нихуя, кроме двух слогов в названии.

Ответы>>864578

27 Окт, 15:00 #310 #864578

>>864575
У плюсов с си как раз общего дохуя, а большая часть роектов на плюсах — си с классами и шаблонами вместо макросов.

Ответы>>864584>>864985

27 Окт, 15:06 #311 #864584

>>864578
общего столько же, сколько у жс с жавой

а большинство проектов на жс - жава с динамической типизацией

Ответы>>864587

27 Окт, 15:09 #312 #864587

>>864584
Ты долбоёб какой-то. Жс поддерживает код жявы?

Ответы>>864588>>864589

27 Окт, 15:11 #313 #864588

>>864587
да

Ответы>>864591

27 Окт, 15:11 #314 #864589

>>864587
жава поддерживает код жс

Ответы>>864591>>864594

27 Окт, 15:12 #315 #864591

>>864588
>>864589
))) ебать даунич

6 Кб, 479x108

27 Окт, 15:17 #316 #864593

>>856777 (OP)
Аноны, полный ноль в С на связи, препод дал это задание в С, т.е. создать программу для решения с вводом переменных, как долго я буду с этим дрочиться, если знаний в С тупо нет Только в Паскале еще более менее?

27 Окт, 15:18 #317 #864594

>>864589
Ты серьёзно долбоёб?

Ответы>>864604

27 Окт, 15:24 #318 #864604

>>864594
Если ты не умеешь в программирование, то кто в этом виноват, мань?

Ответы>>864605

27 Окт, 15:24 #319 #864605

>>864604
Кто виноват что ты пишешь хуйню, сам нихуя не понимая?

Ответы>>864607

27 Окт, 15:27 #320 #864607

>>864605
Но ведь пишешь хуйню ты, хорошо?

Ответы>>864610>>864613

27 Окт, 15:28 #321 #864610

>>864607
>хорошо?
Плохо.

Ответы>>864612

27 Окт, 15:30 #322 #864612

>>864610
Хорошо. Хорошо?

27 Окт, 15:30 #323 #864613

>>864607
Но ведь долбоёб ты, хорошо? Пруф или соси хуй.

Ответы>>864614

27 Окт, 15:31 #324 #864614

>>864613
Пруф. хорошо?

Ответы>>864617

27 Окт, 15:33 #325 #864617

>>864614
нет(

Ответы>>864620

27 Окт, 15:34 #326 #864620

>>864617
да.ладно?

69 Кб, 1366x768

1437 27 Окт, 16:11 #327 #864644

http://pastebin.com/60GePxa2
Подскажите в чем ошибка, почему криво заполняет массив с клавиатуры?

Ответы>>864651

27 Окт, 16:21 #328 #864648

Крестотред утонул — теперь дауны и лабодауны собираются здесь.

27 Окт, 16:27 #329 #864651

>>864644
>в чем ошибка
В ДНК, очевидно же.

27 Окт, 16:54 #330 #864668

>>856777 (OP)
Ананасы, какую структуру данных лучше всего использовать для записи и хранения в ней логов? Основные требования - отсутствие malloc-ов и возможность добавления записей с помощью snprintf т.е. очевидный кольцевой буффер отпадает

Ответы>>864686>>864690>>864851>>865048

9 Кб, 353x333

27 Окт, 17:11 #331 #864679

>>856777 (OP)
Что может быть не так с этим?

Ответы>>864686>>864687>>864956

27 Окт, 17:18 #332 #864686

>>864668
Прям полное отсутствие malloc-ов, или один раз не пидарас? коли не пидор - выдели при инициализации всё что нужно и не еби мозга, иначе задумайся о своей реализации snptintf
>>864679
ДНК. А вообще - почитай про точки следования, с оптимизациями вычисление i может и покорёжится.

Ответы>>864855

27 Окт, 17:19 #333 #864687

>>864679
Ну и говно.

27 Окт, 17:55 #334 #864690

>>864668
Кольцевой буфер + промежуточный буфер для печати. Печатаешь в промежуточный, копируешь в кольцевой.

27 Окт, 18:34 #335 #864733

Соре за тупой вопрос, но не гуглится
Что такое !=?

Ответы>>864767

27 Окт, 18:42 #336 #864747

Ну, <= это меньше или равно например

27 Окт, 18:53 #337 #864767

>>864733
Товсто

27 Окт, 20:38 #338 #864851

>>864668
>snprintf т.е. очевидный кольцевой буффер отпадает
Не отпадает.
http://www.gnu.org/software/libc/manual/html_node/Custom-Streams.html

27 Окт, 20:44 #339 #864855

>>864686
>А вообще - почитай про точки следования, с оптимизациями вычисление i может и покорёжится.
Чтобля? Каким образом?

Ответы>>864866

27 Окт, 20:58 #340 #864866

>>864855
>почитай про точки следования

Ответы>>864956>>865144

28 Окт, 00:07 #341 #864956

>>864866
Ты что-то такое слышал, но не знаешь, что именно? Где у него там i модифицируется, чтобы точки следования повлияли?

>>864679
У тебя код картинкой, перепечатывать его никто не будет, а что тебе в нем не нравится, и что ты вообще хотел сделать - ты не сказал.

28 Окт, 01:08 #342 #864984

>>864561
>хотел оценку от опытных людей
>опытных людей
>на дваче
>опытных
лол

28 Окт, 01:10 #343 #864985

>>864578
>У плюсов с си как раз общего дохуя
Не настолько, чтобы мешать их в одну кучу и заменять один другим.
>большая часть роектов на плюсах — си с классами и шаблонами вместо макросов
Ну это явно хуёвый подход к программированию на крестах, ставить его в пример как-то глупо.

28 Окт, 01:15 #344 #864987

Это я тут вчера хуйню про инлайн указателей на функции гнал. Зато тред сишечки живет и даже висит на видном месте.

Ответы>>865044

28 Окт, 10:18 #345 #865044

>>864987
Молодец, мужественно признался на анонимном формуе.

28 Окт, 10:52 #346 #865048

>>864668
>какую структуру данных лучше всего использовать для записи и хранения в ней логов?
Используй mmap, malloc-ов нет, можно через sprintf писать

28 Окт, 12:10 #347 #865073

>>856777 (OP)
Все на английцком, дай на руццком

Ответы>>865080>>865093

28 Окт, 12:24 #348 #865080

>>865073
Ну вот выучишь ты синтаксис языка, читая русские учебники, а что дальше? Все интересные статьи на английском, документация к либам на английском, комментарии в коде на английском, тикеты на английском, тз на английском. Намек понял?
Впрочем, если тебя в вузике язык учить заставлют, Керниган и Ричи есть в русских переводах, даже в трех изданиях, вместо каноничных двух.

28 Окт, 12:52 #349 #865093

>>865073
На хуицком. В поиск научись

28 Окт, 14:26 #350 #865133

Как проверить число на чередование чёрных и нечётных цифр?

Ответы>>865135

28 Окт, 14:32 #351 #865135

>>865133
Разбей задачу на подзадачи: научись получать цифры числа (snprintf или делением на 10), а потом напиши цикл по цифрам, проверяя это самое чередование. Потом посмотри на свое решение и выкинь лишние шаги.

28 Окт, 14:43 #352 #865144

>>864866
Прочитал тебе за щёку, даун.

Ответы>>865146

28 Окт, 14:44 #353 #865146

>>865144
ебать Cантехника порвало)

Ответы>>865150

28 Окт, 14:50 #354 #865150

>>865146
Ну так зашивайся, раз порвало.

Ответы>>865160

28 Окт, 15:01 #355 #865160

>>865150
зачем мне тебя зашивать?

29 Окт, 14:51 #356 #865720

Пиздец я конченый. Решаю задачку 1.13 из KR, вроде написал быстро - НЕ РАБОТАЕТ. Ну сука, ушел курить с тетрадкой и ручкой, возвращаюсь, написал блять точно все как надо, уж точнее не придумаешь. Снова не работает. Я минут 20 с выискиывал логическую ошибку, прежде чем понял, что проблема была в непоставленных скобках для блока if else.
поплакался

Ответы>>865723>>865728

29 Окт, 14:54 #357 #865723

>>865720
Это нормально. Все на это напарывались. В твоей жизни еще будут и = вместо ==, и ошибки на 1 в for, и упущенные break в switch, и много других радостей.

Ответы>>866021>>866035

29 Окт, 15:16 #358 #865728

>>865720
держи нас в курсе

Ответы>>865838

29 Окт, 17:45 #359 #865838

>>865728

Так и будет, не сомневайся. Тебе могу даже на емайл первому писать

Ответы>>865863

Какашечка 29 Окт, 18:40 #360 #865863

>>865838
и мне пиши

Какашечка 29 Окт, 18:43 #361 #865864

сисюны, решительно пояснили преимущество енюмов над дефайнами для констант. сам топлю за дефайны.

Ответы>>865943>>866019>>866071

29 Окт, 20:39 #362 #865943

>>865864
Дефайны более гибкие: можно делать unsigned, можно втыкать флаги в старшие биты. В целом, можно думать об этом так: если enum подходит в качестве типа переменной или аргумента (например, void foo(enum smth arg)), тогда стоит использвать enum. Если возникают причины так не делать, возвращаемся к дефайнам.

Ответы>>866109

29 Окт, 23:17 #363 #866019

>>865864
просто открой сорцы любого mature опенсорсного проекта
там сразу поймешь где и как перечисления используются
тупо того же линукса

Ответы>>866109

29 Окт, 23:22 #364 #866021

>>865723
кстати, все перечисленное тобой легко предупреждается подключением утилит статического анализа кода..
непонятно, почему разрабы до сих пор ленятся их использовать

Ответы>>866030

29 Окт, 23:50 #365 #866030

>>866021
> легко предупреждается подключением утилит статического анализа кода
Не так уж и легко. Ловится далеко не все, что хотелось бы, зато количество ложных срабатываний отбивает всякое желание проверять код на постоянной основе - либо ты каждый раз читаешь километры логов, либо ты орально ублажаешь статический анализатор вместо написания программы.

> непонятно, почему разрабы до сих пор ленятся их использовать
Встречный вопрос: ты что-нибудь крупное писал, или только на хелловорлдах тестил?

Ответы>>866036>>866227

30 Окт, 00:06 #366 #866035

>>865723
>В твоей жизни еще будут и = вместо ==, и ошибки на 1 в for, и упущенные break в switch, и много других радостей.
Это не то, что статическими анализаторами, это всеми компиляторами ловится.

Ответы>>866045

30 Окт, 00:08 #367 #866036

Другой-анон врывается в тред

>>866030
>Не так уж и легко.
Не легко, а ОЧЕНЬ легко.
> Ловится далеко не все, что хотелось бы
Не могу представить, чего бы ещё хотелось, столько всего выловилось.
> количество ложных срабатываний отбивает всякое желание проверять код на постоянной основе - либо ты каждый раз читаешь километры логов, либо ты орально ублажаешь статический анализатор вместо написания программы.
Осиль grep. 5 фильтров и никаких ложных срабатываний нет.

> ты что-нибудь крупное писал, или только на хелловорлдах тестил?
В проекте 2.3 MLOC C++ + 0.7 MLOC C

Ответы>>866045

30 Окт, 00:22 #368 #866045

>>866035
> это всеми компиляторами ловится.
res = 1;
for (i = 0; i <= e; i++) {
res *= x;
}
Не подскажешь, кем это ловится? И как оно вообще может ловиться?

>>866036
> 5 фильтров и никаких ложных срабатываний нет.
Какие фильтры, ты о чем вообще вон, в PVS-Studio предлагают комментариями с аннотациями срать, чтобы fp подавить? Например, есть одна вижуал студия. Есть глобальный массив структур items, последний его элемент всегда { 0 }. Функция делает: for (ptr = items; ptr->name != NULL; ptr++) { ... } Статический анализатор в студии клинит вроде починили в последнем апдейте, и он говорит, что я выхожу за пределы массива. Что ты будешь грепать? Отключишь сообщение целиком? А в другом месте оно может на баг указать.

Ответы>>866195>>866246

30 Окт, 01:17 #369 #866061

Насколько clang умеет лучше в трансляцию over гцц и студия?

Ответы>>866064>>866197

30 Окт, 01:22 #370 #866064

>>866061
Немного лучше гцц/местами/очень сильно зависит от кода/с каждым релизом обоих соотношение меняется. Собирай свой код и профилируй.

30 Окт, 02:00 #371 #866071

>>865864
enum {HUITA_RAZ, HUITA_DVA, HUITA_TRI, KOLICHESTVO_HUIT};
struct huita massiv[KOLICHESTVO_HUIT] = { … };

Inogda eto udobno.

Ответы>>866109

Какашечка 30 Окт, 07:13 #372 #866109

>>865943
>>866019
>>866071
нашел только один плюс в енюмах, можно задавать выражение и будет подставлен результат. дефайны как то проще и наглядней.

32 Кб, 500x360

30 Окт, 07:13 #373 #866110

Необходимы УЖЕ готовые функции и алгоритмы поиска пути в двумерном пространстве (x,y)

Пример:
11111011B1
1111001111
1111101111
11A1111011
1111111111

Есть вот плоскость из клеток.
Есть Начальная координата A(x1,y1) и конечная B (x2,y2).
Нужно найти кратчайший путь от A до B и записать все x3,y3 по которым нужно идти в массив walk_x[index], walk_y[index]

Нахуя мне это нужно? Есть 2d MMO в ней уже есть A алогритм поиска пути, но он блядь ограничен всего 32 клеточками, и в зоне 32 клеток от персонажа я могу ходить нормально (алгоритм работает и я обхожу препятствия), но блядь это работает исключительно в зоне 32x32, а карты от 300х400 до 500х500, т.е. мне нужно научится преодолевать препятствия другими способами, либо если существует способ задействовать A алгоритм и разбивать как-то локацию на отдельные участки и чек-поинты по которым можно двигаться (от одного к другому) - то это было гуд.

В общем чуваки, мне нужны ГОТОВЫЕ примеры рабочих функций ЛЮБОГО алгоритма поиска пути и записи всех координат от точки A(x1,y1) до точки B(x2,y2) c обходом препятсвий.

К сожалению я нашел в других языках программирования всех алогритмы которые мне интересны Jump Point Seach, A, D, Lee Algorithm но я слишком тупой что бы их портировать под Си, да и знаний Си особых нет.

Если кто-то может запилить функцию которая принимает find_route(X1, Y1, X2, Y2) (где X1,Y1 = начало где стоит чел, и X2, Y2 куда нужно найти путь если существует и записать его в массив route_x[index] route_y[index] - было бы ахуенно.

====================
Дополнительные вопросы:
====================

Назовите пожалуйста оптимальные алгоритмы для поиска пути которые не жрут систему пиздец как при поиске пути на картах от 300x300 клеток до 500x500 (больше 500х500 возможности сделать карту нет). Лабиринты проходить не собираюсь, 80% карты можно посетить, 20% карты занимают различные препятствия (здания, объекты, и т.п. т.д.)

Накидайте годной инфы и желательно примеры, а еще было бы ахуенно если бы можно было получить функцию в которую скинул бы указатель на свои массивы матрицы карты где уже изначально обозначены все клеточки как проходимые или нет, и получить ответ - можно ли добежать до указанной координаты, или нет, и если можно - записать все клетки (x,y) по которым можно пробежать до точки B с точки А.

32 Кб, 500x360

30 Окт, 07:13 #373 #866110

Необходимы УЖЕ готовые функции и алгоритмы поиска пути в двумерном пространстве (x,y)

Пример:
11111011B1
1111001111
1111101111
11A1111011
1111111111

Есть вот плоскость из клеток.
Есть Начальная координата A(x1,y1) и конечная B (x2,y2).
Нужно найти кратчайший путь от A до B и записать все x3,y3 по которым нужно идти в массив walk_x[index], walk_y[index]

Нахуя мне это нужно? Есть 2d MMO в ней уже есть A алогритм поиска пути, но он блядь ограничен всего 32 клеточками, и в зоне 32 клеток от персонажа я могу ходить нормально (алгоритм работает и я обхожу препятствия), но блядь это работает исключительно в зоне 32x32, а карты от 300х400 до 500х500, т.е. мне нужно научится преодолевать препятствия другими способами, либо если существует способ задействовать A алгоритм и разбивать как-то локацию на отдельные участки и чек-поинты по которым можно двигаться (от одного к другому) - то это было гуд.

В общем чуваки, мне нужны ГОТОВЫЕ примеры рабочих функций ЛЮБОГО алгоритма поиска пути и записи всех координат от точки A(x1,y1) до точки B(x2,y2) c обходом препятсвий.

К сожалению я нашел в других языках программирования всех алогритмы которые мне интересны Jump Point Seach, A, D, Lee Algorithm но я слишком тупой что бы их портировать под Си, да и знаний Си особых нет.

Если кто-то может запилить функцию которая принимает find_route(X1, Y1, X2, Y2) (где X1,Y1 = начало где стоит чел, и X2, Y2 куда нужно найти путь если существует и записать его в массив route_x[index] route_y[index] - было бы ахуенно.

====================
Дополнительные вопросы:
====================

Назовите пожалуйста оптимальные алгоритмы для поиска пути которые не жрут систему пиздец как при поиске пути на картах от 300x300 клеток до 500x500 (больше 500х500 возможности сделать карту нет). Лабиринты проходить не собираюсь, 80% карты можно посетить, 20% карты занимают различные препятствия (здания, объекты, и т.п. т.д.)

Накидайте годной инфы и желательно примеры, а еще было бы ахуенно если бы можно было получить функцию в которую скинул бы указатель на свои массивы матрицы карты где уже изначально обозначены все клеточки как проходимые или нет, и получить ответ - можно ли добежать до указанной координаты, или нет, и если можно - записать все клетки (x,y) по которым можно пробежать до точки B с точки А.

Показать весь текст
Ответы>>866134>>866181

30 Окт, 09:07 #374 #866132

Блин, поставил i3wm, теперь я как настоящий хакр

Ответы>>866517

30 Окт, 09:36 #375 #866134

>>866110
>Необходимы УЖЕ готовые функции
50000 рублей

30 Окт, 12:18 #376 #866181

>>866110
Вот например, загуглил в гугле и нашел курсовик на плюсах:
http://www.twirpx.com/file/998973/

Ответы>>866801>>867444

30 Окт, 12:43 #377 #866195

>>866045
>Какие фильтры, ты о чем вообще
О grep, читать научись.

>вон, в PVS-Studio предлагают комментариями с аннотациями срать, чтобы fp подавить
Так большинство анализаторов требует. Тот же coverity. Кстати, PVS после coverity тонны реальных ошибок выловил.

Ответы>>866227

30 Окт, 12:46 #378 #866197

>>866061
>студия
visual c++ вообще никак в плане оптимизаций. До последней экспериментальной версии, где они наконец реализовали SSA (хотя, как мне кажется, просто сунули внутрь llvm)

30 Окт, 13:28 #379 #866227

>>866195
> Так большинство анализаторов требует.
Что и требовалось доказать. Ты >>866030
> орально ублажаешь статический анализатор
или несколько разом. И нехуй тут про grep затирать. А знаешь, что будет потом? Потом кто-нибудь напишет еще один анализатор, и ты пойдешь расставлять новые комментарии в файликах, и удалять старые. Что угодно, только бы сразу не писать качественный код. Правильно было бы хранить подавленные предупреждения вместе с контекстом анализатора в отдельном файле, и чтобы статический анализатор знал о системе контроля версий (и желательно, чтобы не только о git). Вот тогда бы можно было включить в билд статический анализ на постоянной основе. Надеюсь, clang к этому придет когда-нибудь.

Ответы>>866229

30 Окт, 13:32 #380 #866229

>>866227
Короче, лалка. Не-систематических (вырезаемых grep-ом) false positive находится две с половиной штуки. И то, если внимательно присмотреться, оказывается, что как минимум одно "false positive" опирается на implementation-defined behavior

Ответы>>866235

30 Окт, 13:47 #381 #866235

>>866229
Я тебе сейчас не могу конкретных примеров из живого проекта привести, но я в свое время заебался читать логи. Алсо, если у тебя богатый опыт, может, напишешь для оппоста абзац со ссылками?

Ответы>>866241>>866243

30 Окт, 14:00 #382 #866241

>>866235
Опыт небогатый. Прогнал PVS, показал результаты ребяткам. Они сказали "ого, coverity пропустил много лажи" (в основном копипейст в логических операторах, одинаковое тело у if и else ветки, невозможные условия типа A > B && A <= B или
if (A) {
if (!A) {
do_something();
}
})

Короче, что этим анализатором обычно находится.

Ответы>>866262

30 Окт, 14:02 #383 #866243

>>866235
Что было из систематических false positive: ссылка очень хитро инициализировалась динамически выделяемой памятью, но завёрнуто это всё было так, как будто из функции возвращается ссылка на локальную переменную.

30 Окт, 14:05 #384 #866246

>>866045
выход за границу массива не статическими анализаторами проверяется, ты путаешь

Ответы>>866262

30 Окт, 14:23 #385 #866262

>>866241
Если говорить о PVS-Studio, есть еще такая проблема, как русские разработчики, не умеющие в бизнесцена - она абсолютно неподъемная для небольших команд, а cppcat кончился.

> невозможные условия
Не вижу причин вообще это ловить. Оно чаще всего остается после всяких #ifdef DEBUG (иногда напрочь выпиленных до проверки, иногда выпиленных только препроцессором), и отлично вычищается любым, даже самым говенным оптимизирующим компилятором.

>>866246
> выход за границу массива не статическими анализаторами проверяется
Отлично проверяется в простых случаях:
char x[10]; for(size_t i = 0; i <= 10; i++) printf("%i\n", x);
Что говорит нам Visual Studio?
> bounds.c(4): warning C6201: Index '10' is out of valid index range '0' to '9' for possibly stack allocated buffer 'x'.

А вот в том случае, про который я говорил выше, оно как раз не должно было проверять, но проверяло и не осиливало осознать условие прекращение цикла. Сейчас потестил - на простом примере уже не ругается, но может еще что-то влияло.

Ответы>>866286>>866314

30 Окт, 14:55 #386 #866282

>>856777 (OP)
Не осилил даже на уровне установки. Нашёл какой-то MinGW, установил, в меню "Пуск" есть только одна программа, которая вызывает консоль, а на рабочем столе появился ярлык для установки всякого говна. Успешен?

Ответы>>866287

30 Окт, 15:04 #387 #866286

>>866262
Запускаешь ту самую консолю из меню пуск. В консоле пишешь mingw-get --help и читаешь. Не помню, нужно ли ставить gcc, или оно уже есть если что, mingw-get install mingw32-gcc. Пишешь хелловорлд, говоришь cd /d полныйпутькпапкесхелловорлдом. Говоришь cc helloworld.c -o helloworld.exe пока читаешь K&R, можешь писать просто make helloworld, где helloworld - имя .c файла без расширения. Большего тебе знать пока не нужно.

Если не осилишь и это, поставь себе Code::Blocks, там есть версия со встроенным GCC - ставишь, пишешь хелловорлд, мышкой тыкаешь конпелировать, ни о чем нидумоешь.

Ответы>>866287>>866289>>866293

sage 30 Окт, 15:04 #388 #866287

>>866286
>>866282
Наебался.

30 Окт, 15:05 #389 #866289

>>866286
Ты очень добрый. Я бы понял, если бы ты просто послал нахуй. Спасибо, но я уже всё удалил.

30 Окт, 15:12 #390 #866293

>>866286
Но Code::Blocks действительно просто берёт и работает, спасибо большое.

30 Окт, 15:37 #391 #866314

>>866262
у тебя массив на стеке
конечно его можно проверить стат тулзой

30 Окт, 16:15 #392 #866342

Котики, кто-то помнит допускаемое количество вложений для switch-case? Пишу функцию, которая зависит от состояния 2ух переменных из 2ух структур. Одна принимает значения 0-1, другая 0-4 это получаеться 10 возможных действий для функции. И что бы не городить 10 if, думаю обойтись switch внутри switch. Можно ли так?

switch(a):
case 0:
switch(b):
....
break;
case 1:
switch(b):
.....
break;

Ответы>>866351>>866487>>866828>>867047

30 Окт, 16:23 #393 #866351

>>866342
> Можно ли так?
Можно, в лимит стандарт гарантирует минимум 127 ты не упрешься точно. А вот читаться это будет хуево. Уверен, что нельзя по-другому? Что за код ты будешь выполнять в свитче?

Ответы>>866357>>866370

30 Окт, 16:32 #394 #866357

>>866351
Обработчик ошибок. 4 из 10 вариантов запускают функции, 2 из 10 принты, остальные 4 из 10 обнуляют необходимые переменные/счетчики/указатели.

Ответы>>866370

30 Окт, 16:40 #395 #866370

>>866351
>>866357
Ну у меня 2 выбора для этого. Или свитч внутри свитч или 10 if-ов. 1ая переменная из структуры 2 флага всего имеет USE; SLEEP; 2ая 5 флагов. Вот эти 10 вариантов флагов я сравниваю, для определения дальнейших действий. Все объявлено через enum. Я не спал уже 2ой день и возможно мой почерк будет маленько бредовый, а посты будут похожи на поток мыслей, заранее прошу прощения.

Ответы>>866445

30 Окт, 18:17 #396 #866445

>>866370
Сделай композитный флаг по формуле (значение флага один помноженное на количество возможных значений флага два плюс значение флага два) и гоняй свич по одному этому числу. И простейший макрос вида
#define CHOICE(flag1, flag2) ((flag1) * FLAG2_COUNT + (flag2))

30 Окт, 18:30 #397 #866451

Вариант имеет право на жизнь. Хотя напрашивается if/else для переменной, которая 0 или 1, а внутри два свитча.

30 Окт, 19:20 #398 #866487

>>866342
не умеешь писать стейт-машины?
пиздуй нахуй из профессии

Ответы>>866500

30 Окт, 19:41 #399 #866500

>>866487
Так я же только учусь. Нет, что бы наставить на путь или кинуть в меня книжкой. А тут сразу на хуй шлют, пичаль.

Ответы>>866551

30 Окт, 20:38 #400 #866517

>>866132
хакеры юзают dwm, который сами допиливают для получения нужно функциональности

30 Окт, 21:45 #401 #866551

>>866500
Не слушай его, он бака

31 Окт, 09:30 #402 #866800

>>857838

если ты не троль, то не слушай даунов которые тебе ответили. Программирование это не знание языка, это знание структур данных и алгоритмов. Ты же не буковки произносишь, а строишь из буковок слова, из слов предложения, из предложений - выстраиваешь мысль. Верно? Аналогично и в программировании. Только огромное количество "слов", и "предложений", уже изобретено до нас, и программистам необходимо лишь жонглировать существующими алгоритмами, структурами данных, и применять уже известные и проверенные на горьком опыте паттерны проектирования и т.п. ит .д.

Если ты хочешь быть мартышкой - будь, и учи Си и С++, и потрать хуеву тучу времени и сил, что бы делать то, что делают на других языках программирования уже во всем продвинутом мире за неделю, на что ты будешь тратить все свои самые драгоценные года. Лучше перекатись в python тред, он намного полезнее будет, чем любые начинания с Си. Си чрезвычайно сложный язык, которые требует чрезмерно повышенное внимание и огромный опыт для его использования для каких-то задач. К сожалению при изучении ты не сможешь ничего сделать более чем сортировочку чисел в массиве, либо нарисовать табличку, это не есть программирование.

Ответы>>866808

31 Окт, 09:32 #403 #866801

>>866181

говно это все. Спасибо за ссылку, но это не то.
Алгоритмы поиска пути мне известны, проблема с их реализацией на Си, на других языках программирования с этим особых проблем нет, но из-за различных очень строгих ограничений в Си многое не представляется возможным реализовать простым способом.

31 Окт, 10:03 #404 #866808

>>866800
Синенавистник!

31 Окт, 10:37 #405 #866828

>>866342
Я бы сделал битовую структуру, где хранил бы флаги и катался по ней в switch c использованием масок. Из плюсов вижу возможную детекцию множественных ошибок (если оно вообще нужно). Но тк я Сишечку только изучаю, я хз адекватное ли это решение.

31 Окт, 11:00 #406 #866845

Code from K&R book:
#include <stdio.h>
#define MAXLINE 1000

int get_line(char line[], int MAXLINE);
...

Error:

string.c:2:17: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
#define MAXLINE 1000
^
string.c:4:31: note: in expansion of macro ‘MAXLINE’
int get_line(char line[], int MAXLINE);

chto ya delayu ne taq?

too lazy to switch language

Ответы>>866848

31 Окт, 11:02 #407 #866848

>>866845
Препроцессор заменяет первый токен, определенный в дефайне, на остальные. Т.е., MAXLINE на 1000. Ты пишешь:
int get_line(char line[], int 1000)
Что ты делаешь не так?

Ответы>>866851

31 Окт, 11:04 #408 #866851

>>866848
Я говорю в объявлении функции "бери вторым аргументом какую-то хуйню 1000 целочисленного типа"
Правильно?

Ответы>>866859

31 Окт, 11:14 #409 #866859

>>866851
И что это должно по-твоему значить? Функции принимают аргументы. Аргумент - это значение, передаваемое тем, кто вызывает эту функцию. Чтобы можно было узнать значение аргумента, у него должно быть имя. А что ты со своей тысячей можешь сделать без имени? #define отрабатывает до компиляции - препроцессор проходит по исходнику и заменяет все дефайны на их значения, поэтому компилятор слово MAXLINE вообще не увидит нигде.

У тебя может быть два варианта.
1) Зафиксировать максимальный размер массива и не передавать его. Ты делаешь (сделал) #define MAXLINE 1000, и внутри функции используешь MAXLINE в качестве лимита. Получается:
int get_line(char line[]) { ... }
и вызов
char buffer[MAXLINE];
get_line(buffer);
2) Ты можешь предоставить вызывающему решать насчет максимального размера. Тогда ты передаешь размер аргументом и используешь этот аргумент в качестве лимита.
int get_line(char line[], int length) { ... }
и вызов
char buffer[12345];
get_line(buffer, 12345);

Ответы>>866865

31 Окт, 11:18 #410 #866865

>>866859
Я понимаю, что препроцессор заменяет дефайны, этот код я перепечатал прямо из книги, а оно не компилируется, вот я и опупел слегка. Так то я уже заменил имя формального параметра в функции, все заработало

Ответы>>866871

31 Окт, 11:22 #411 #866871

>>866865
Поглядел книгу - у тебя либо ошибка распознавания, либо ты просто ошибся регистром (там maxline). Регистр в сишечке имеет значение. MAXLINE и maxline - абсолютно разные вещи.

Ответы>>866877

31 Окт, 11:27 #412 #866877

>>866871
русское издание блядское

Ответы>>866885

sage 31 Окт, 11:32 #413 #866885

>>866877
В шапке прямая ссылка на английское. Подглядывай туда, если что.

Ответы>>866888

31 Окт, 11:35 #414 #866888

>>866885
Да я лучше уж на инглише, спасибо.

Блин, мне кажется, или задания тут потруднее вем у Праты

Ответы>>866893

31 Окт, 11:38 #415 #866893

>>866888
Простые, упрощенные до жути примеры и несложные задачки. Хочешь сказать, у Праты совсем дрисня в задачах?

Ответы>>866931

31 Окт, 12:04 #416 #866931

>>866893
Пожалуй нет, мне показалось

Ответы>>867257

31 Окт, 13:24 #417 #867024

>>864362
шли ноль, не прогадаешь

31 Окт, 13:55 #418 #867047

>>866342
Стараюсь в таких случаях чередовать switch-case и if, иначе адская каша получается

Ответы>>867279

31 Окт, 16:50 #419 #867159

>>857838
Изучи архитектуры компьютеров(процессоров), машинную логику/арифметику, строение *nix, Win систем. На это придеться потратить ~3-4 годика, при необходимом рвении и желании можно уложиться и в 2. После этого любой язык программирования осилишь за пару месяцев. При этом паралельно будет изучение алгоритмов. И к 1-ому курсу будешь первоклассным программистом.

31 Окт, 18:44 #420 #867257

>>866931
Снова я. Почему может не работать ctrl-d? С клавой все ок, но ввод програамки не воспринимает EOF

Ответы>>867274

31 Окт, 19:05 #421 #867274

>>867257
В Windows - Ctrl+Z. Еще не забудь о том, что ввод по умолчанию буферизированный, и буфер заполняется по Enter, т.е., нужно жать Ctrl+Z (или Ctrl+D в Linux) и потом Enter. Ну или пости код.

Ответы>>867290

31 Окт, 19:11 #422 #867279

>>867047
>switch(a):
>case 0:
>switch(b):
Очевидно, это составное, сложное условие. Либо переделывай на битовую маску, если кончено это возможно, либо переписывай все на if, ищи оптимальную конструкцию. Я считаю switch - зло, прочитать тяжело, всегда стараюсь if использовать, легче вычитывать каждую ветку логики.
>867047
>чередовать switch-case и if
Говнецо тоже.

31 Окт, 19:21 #423 #867290

>>867274
Спасиб, уже переделал и все заработало.
осталось понять почему

31 Окт, 23:20 #424 #867444

>>866181
Перезалей на рыгохост какой-нибудь.

01 Ноя, 00:43 #425 #867481

https://habrahabr.ru/company/pvs-studio/blog/314044/
Аноны, поясните нуфагу, что за йобу они тут рекламируют? Это софтина находит плохой код?

Ответы>>867492

01 Ноя, 01:06 #426 #867492

>>867481
Выше тред поскролли, мы как раз обсуждали. Плохой код - субъективное понятие. Софтина находит код, который нарушает какие-то положения стандарта. И, что гораздо круче, она находит еще и тот код, который на основании каких-то признаков или исходя из логических выводов программы может содержать ошибки (а может и не содержать). PVS-Studio стоит овердохуя и не продается физическим лицам. Кроме нее существуют и другие тулзы для статического анализа (всякие cppcheck, Coverity и прочие линты), в статический анализ понемногу учатся сами компиляторы (Visual Studio и clang кое-как умеют, например). Но с PVS-Studio, конечно, все это не идет ни в какое сравнение.

Ответы>>867619

Какашечка 01 Ноя, 09:10 #427 #867619

>>867492
>PVS-Studio стоит овердохуя и не продается физическим лицам.
а сколько стоит и почему не продается? если застартпупить свой анализатор, взлетит?

Ответы>>867664>>867702>>867808

01 Ноя, 11:50 #428 #867664

>>867619
>а сколько стоит
Для всех по-разному. Где-то была приведена переписка с PVS-Studio, там цена была в районе 5k$ в год.

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

01 Ноя, 12:41 #429 #867689

Посоветуйте первую книгу для изучения основ C, я немного мимокрок, хотел почитать что то для обучения, прежде чем читать книгу с оп пика.

Ответы>>867699

16 Кб, 150x220

01 Ноя, 12:55 #430 #867699

>>867689

01 Ноя, 13:00 #431 #867702

>>867619
Взлетит. Если тебе удастся его написать, конечно же - там работы до опизденения.

Ответы>>867727

01 Ноя, 13:35 #432 #867727

>>867702
пилю годноту. я любитель эс в частности clips и в сабжевой гуглагруппе пару лет назад появился чел, говорил, что их компания работает над проектом статического анализатора, задавал грамотные вопросы, фирма его в подписи светилась, вроде как с пиндостана. так вот, что в нормальных анализаторах крутится экспертная система, это для меня без сомнения, проблема в базе знаний. если бы можно было набрать паттерны ошибок как здесь http://www.viva64.com/en/w/ то создать анализатор более чем реально. но с другой стороны, анализаторов этих всяких дохуя и даже если застартпупить проектик, вероятность занять место под солнцем милипиздрическая.

Ответы>>867738

01 Ноя, 13:48 #433 #867738

>>867727
Да похуй абсолютно на находимые ошибки, вась, просто посмотри на Coverity. Умеет примерно следующее: генерировать красивые отчёты с графиками, конвертировать их в пдфчики/доки и любые другие форматы и... всё. К чему я это: тут главное пиар и количество бабла в него вложенное, как и всегда в бизнесе.

Ответы>>867747

01 Ноя, 13:59 #434 #867747

>>867738
тематика интеллектуального анализа текста мне интересна и запилить годноту поимев профит тоже и если бы запахло жирной котлетой, я бы макнулся.

Ответы>>867808

01 Ноя, 15:23 #435 #867801

Программач, поясни за gdb. Есть какие-нибудь адекватные уроки для обучения работе с этим инструментом? В инглиш я вери бед, так что желательно всё же русскоязычное что.

Ответы>>868075

01 Ноя, 15:44 #436 #867808

>>867619
Вангую, что пока ты пилишь свой, анализатор в clang уже будет допилен до приемлемого уровня.

>>867747
Это не про анализ текста если только ты не правила для cppcheck пилить собрался, лол. Это гораздо больше про компиляторы. Когда компилятор обрабатывает исходник, он анализирует код и применяет разные техники оптимизации (constant propagation, dead code elimination, например), чтобы сгенерить быстрый и/или короткий код. Сгенерив код, компилятор данные анализа выбрасывает, а статический анализатор, наоборот, использует подобные данные для поиска возможных проблем.

Ответы>>867812

01 Ноя, 15:53 #437 #867812

>>867808
>Это не про анализ текста
как раз про то, просто кампутерные языки более примитивные и легче поддаются анализу.
> разные техники оптимизации
это то причем? как бонус анализаторы могут выдавать подсказки по оптимизации.

грубо говоря, нужно в соответствии с стандартом искать семантические ошибки.
if (a = 1) <- как банальный пример.

Ответы>>867847

13 Кб, 543x264

01 Ноя, 16:44 #438 #867847

>>867812
> if (a = 1) <- как банальный пример.
Фу. Давай лучше поговорим о if ((ptr = malloc(1000))) { ... }?

> > разные техники оптимизации
> это то причем?
При том, что техники используются те же. Если у тебя в коде:
point.x = 1;
point.x = 1;
то статический анализатор после преобразования кода в какую-нибудь SSA-форму находит лишнее присваивание, а потом подключает базу знаний, из которой извлекает вероятное описание проблемы (например, он может посмотреть, что в структуре кроме x есть только y и намекнуть на копипаст), а если не найдет совпадений в базе знаний - рассказывает только о присваивании. Но чтобы увидеть подобную проблему в:
buffer[0] = 1;
buffer[42 * (1 - sizeof(char))] = 1;
ему приходится выполнять те же самые оптимизации, что и компилятору.

Алсо, вот тебе пример того, как студия делает анализ, мне он очень нравится. По сути это false positive (этот конкретный код не содержит ошибок), но если вдуматься, то я должен был использовать do { ... } while.

Ответы>>867943

Какашечка 01 Ноя, 18:20 #439 #867943

>>867847
>if ((ptr = malloc(1000))) { ... }?
давай, что здесь не так?

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

Ответы>>867954>>867965

sage 01 Ноя, 18:27 #440 #867954

>>867943
> а о коммерческом потенциале.
Шел бы ты в /biz/, барыган, с таким подходом к вопросу. Из-за таких как ты, у которых на первом месте прибыль, а на втором все остальное, мир и катится в пизду.

01 Ноя, 18:41 #441 #867965

>>867943
> и я смысла в твоей простыне не понял
А я про анализ текста отвечал. Анализируется совсем не текст. И вообще это серьезная магия, без соответствующего опыта ты ничего адекватного не напишешь.

01 Ноя, 21:37 #442 #868062

Есть один шеллкод, который просто спавнит мессаге бокс "Хелло, ворлд" я с этого кекну немношк. Хочу по-приколу инжектировать его во все процессы и получить кучу таких окошек. Что почитать об этом? Как сделать инжект в каждый процесс?

Ответы>>868076>>868086

23 Кб, 480x551

01 Ноя, 21:38 #443 #868064

Спойлер не там

01 Ноя, 21:44 #444 #868075

>>867801
Нагугли какой-нибудь quick reference (тысячи их), а дальше юзай help и официальную документацию по необходимости http://sourceware.org/gdb/current/onlinedocs/gdb/

01 Ноя, 21:45 #445 #868076

>>868062
сделал по-приколу инжект тебе в рот

Ответы>>868084

01 Ноя, 22:06 #446 #868084

>>868076
Приятное теплое распирание и щекотание при выполнении каждой инструкции.

01 Ноя, 22:10 #447 #868086

>>868062
> Что почитать об этом? Как сделать инжект в каждый процесс?
Ну очевидно же. >>861712

02 Ноя, 17:06 #448 #868535

Репост, здесь мне более компетентные люди помогут.

Анон, у меня вопросы по сетям, возможно глупые: при каждом http-соединении программой-сервером создаётся файл-сокет, поскольку http работает поверх tcp?

И ещё: через TCP-сокет можно ответить http-пакетом, но это уже будет вроде как нарушение конвенции?
Как с этим соотносится то, что TCP-бинарный, HTTP-текстовый?
Простейший абстрактный TCP-сервер принимает данные и выводит их. То что они сразу выводятся не в бинарном виде-заслуга либы (<sys/socket.h>, etc)?

Ответы>>868601>>869146

02 Ноя, 18:40 #449 #868601

>>868535
> при каждом http-соединении программой-сервером создаётся файл-сокет
Во-первых, не при каждом. В HTTP/1.1 есть такой Keep-Alive, когда после получения одного ресурса с сервера клиент может попросить другой, используя уже установленное соединение. Например, так всякие картиночки с двачей браузеру удобнее грузить. Во-вторых, файлом сокет быть не обязан (в винде у сокета по умолчанию нет файлового I/O). Но в целом, ты прав: создается TCP-сокет, подключается к серверу, отправляется запрос и читается ответ.

> И ещё: через TCP-сокет можно ответить http-пакетом, но это уже будет вроде как нарушение конвенции?
Не совсем понятный вопрос. И не совсем правильно говорить про HTTP "пакеты". Это поточный протокол поверх поточного же TCP, данные могут приходить разными порциями.

> Как с этим соотносится то, что TCP-бинарный, HTTP-текстовый?
Текст - не абстрактная хуйня в вакууме, это просто интерпретация последовательности байтов. В частности, в HTTP используется ASCII.

> То что они сразу выводятся не в бинарном виде-заслуга либы
Данные приходят байтиками, но если ты делаешь какой-нибудь printf, это значит, что ты интерпретируешь эти байтики как символы в кодировке ASCII (в ASCII нет преобразований - порядковый номер символа равен численному значению байта).

Ответы>>868949>>868975

03 Ноя, 02:53 #450 #868858

поясните за аргументы командной строки. если что я шиндоусблядь. вот в K&R базар пошел за сабж и несколько примеров программ. вот следующая хуета например должна найти образец в строке.

#define MAXLINE 1000

int main(int argc, char *argv[]) {
char line[MAXLINE];
int found = 0;
if(argc < 2) printf("используйте find для образца\n");
else
while(getline(line, MAXLINE))
if(strstr(line, argv[1]) != NULL){
printf("%s", line);
found++;
}
return found;
}
собственно когда я откомпилировал это и запускаю программу не о какой инициализации аргументов разговора быть не может в окне пишется первый принтф допустимто. ну я открыл просто командную строку и ввел там типо find -"eblo" -n "lo", ввёл всё еще раз по другому. проясните короче за эту хуйню.

Ответы>>868859>>868948

03 Ноя, 02:54 #451 #868859

>>868858
ну воще за эти аргументы, как я например указываю количество параметров в argc.

03 Ноя, 06:54 #452 #868910

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

Ответы>>868939>>868979

03 Ноя, 09:06 #453 #868939

>>868910
> драйверов и служб для линукс
Это называется "модули ядра" и "демоны", виндузятник.

Ответы>>868941

03 Ноя, 09:18 #454 #868941

>>868939
А по делу что сказать?

03 Ноя, 10:04 #455 #868948

>>868858
Что тебе пояснить? Программа берет командную строку:
> find -"eblo" -n "lo"
разбивает ее на куски по пробелам (куски в кавычках считаются одним целым, даже если внутри есть пробелы). Конкретные детали того, как парсится командная строка, зависят от ОС и/или стандартной библиотеки C. После того, как командная строка разобрана, создается argv, в него кладутся указатели на каждый кусок, а в argc общее количество указателей. А потом еще в argv[argc] кладется NULL.

Если у тебя программа с аргументами не запускается, удостоверься, что ты не ошибся директорией и именем (может, у тебя компилятор собирает какой-нибудь a.exe). В Windows есть команда find, поэтому если в текущей директории нет твоей find.exe, запустится системная команда. Алсо, практически во всех IDE можно указать командную строку для запуска, но в таком случае указывать имя самой программы (find) не нужно, только аргументы.

03 Ноя, 10:04 #456 #868949

>>868601
Спасибо, бро, добра тебе!

16 Кб, 150x220

03 Ноя, 11:07 #457 #868970

Аноны, правда ли стоит начинать вкатываться в программирование (начинать хотел с C) с помощью этой книги, если я мимокрок?
Если литература годная, может вообще стоит начать с "основ программирования для чайников"?
Изначально хотел начать с какой нибудь простой книги о основа C + конспекты лекций институтов по алгоритмам и систем данных, а после перейти на книгу с оп пика.

Ответы>>868971

03 Ноя, 11:09 #458 #868971

>>868970
Начни с питона, нет начального гемороя как в Си, куча готового кода, всякие онлайн соревнования и задачи. Как наберешься навыков именно программирования, там уже будешь видеть дальнейший свой путь развития.

Ответы>>868974

03 Ноя, 11:19 #459 #868974

>>868971
Питон же относится к web, не так интересно (как мне показалось)

Ответы>>868976

03 Ноя, 11:19 #460 #868975

>>868601
А не скажешь, что можно почитать/посмотреть по теме.
Читал Олиферов год назад-ничего не запомнил, Beejs Netwrk Programming нормально зашло.

Сейчас планирую UNIX Network Programming начать.

Ответы>>868979>>869011

03 Ноя, 11:21 #461 #868976

>>868974
Питон относится ко всему, в первую очередь к десктопам.

Ответы>>868980

03 Ноя, 11:23 #462 #868979

>>868975
Можешь оценить свой навык создания unix приложений? Что читал, что зашло, как оно вообще.
>>868910 - анон

Ответы>>868983

03 Ноя, 11:27 #463 #868980

>>868976
Я правильно понимаю, что питон просто будет для меня лучшим началом, так как более дружелюбен к мимокрокам?

И почему в этой пасте советуют книгу Dive into python, когда есть Укус питона, потому используют даже в НАСА!!11

Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.

Ответы>>868982

03 Ноя, 11:30 #464 #868982

>>868980
Да, правильно понимаешь.
Мне питон нравится тем, что в нём можно работать как в командной строке сразу.

03 Ноя, 11:33 #465 #868983

>>868979
Практически нулевой. Кроме того что выше-почти ничего не читал.
Только начинаю вкатываться в низкий уровень, а так пишу всякую сетевую и около-сетевую хуиту на питоне. Хочу глубоко врубиться во все, с чём работаю.

03 Ноя, 12:33 #466 #869011

>>868975
Читай UNIX Network programming, да. Не стесняйся писать мелкие программки, пока читаешь. Собери себе виртуальную сеточку из пары-тройки линуксов в VirtualBox если воткнуть какой-нибудь арчик без гуя, оно будет летать даже на совсем днищепк без аппаратной виртуализации и экспериментируй. Теория, не закрепленная практикой, быстро забывается, а если соберешь все грабли по пути, в голове точно что-нибудь останется.

Ответы>>869059

03 Ноя, 14:37 #467 #869059

>>869011
Так и сделаю, добра тебе ещё раз!

03 Ноя, 16:49 #468 #869146

>>868535
Ты походу дела вообще не понимаешь о сетях.
Google: инкапсуляция модели OSI;
google: модель OSI

Ответы>>869311

Какашечка 03 Ноя, 20:24 #469 #869263

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

Ответы>>869265>>869287

03 Ноя, 20:30 #470 #869265

>>869263
>а хочу как флаги
битовые операции

Ответы>>869301

03 Ноя, 20:55 #471 #869287

>>869263
> удобно обнулять при инициализации да и места не жрут
struct { bool foo:1; bool bar:1; unsigned baz:4; } x = { 0 };

03 Ноя, 21:12 #472 #869301

>>869265
>битовые операции
ну и норм
>struct { bool foo:1; bool bar:1; unsigned baz:4; } x = { 0 }
уотаквот malloc(sizeof(YOBAStruct))

Ответы>>869303

03 Ноя, 21:14 #473 #869303

>>869301
> уотаквот
Щито?

Ответы>>869309

03 Ноя, 21:17 #474 #869309

>>869303
>Щито?
динамически выделяется, вот что.

Ответы>>869312

03 Ноя, 21:19 #475 #869311

>>869146
Да, как-то хуёво отложилось.

HTTP-пакет неявно включает в себя заголовки всех нижележащих уровней, ты на это намекаешь?

Ответы>>869346

03 Ноя, 21:19 #476 #869312

>>869309
Ну ты же написал "структура" - кто тебе мешает динамически выделять структуры с битфилдами?

Ответы>>869324

03 Ноя, 21:29 #477 #869324

>>869312
> кто тебе мешает динамически выделять структуры с битфилдам
никто, просто по району ходит слух, что битфилды не всегда кроссплатформенны и конпиляторозависимы.

Ответы>>869326

03 Ноя, 21:35 #478 #869326

>>869324
> что битфилды не всегда кроссплатформенны
Чушь собачья. Разворачиваются в те же самые инструкции, что и логические операции. Ты, наверное, не до конца понял. На самом деле, проблема с битфилдами - интероперабельность. Если твой код будет писать битфилды в файл - ты обязательно их прочитаешь, а вот программа, собранная другим компилятором или под другую платформу - не обязательно - выравнивание и порядок битов в битфилде зависит от компилятора. То же, если битфилды будут торчать в API твоей библиотеки. Если ты соберешь либу одним компилятором, а пользовательский код будет собран другим - может случиться неприятность. Но в своем коде можно использовать битфилды без проблем.

Ответы>>869337

03 Ноя, 21:36 #479 #869329

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

Ответы>>869333

03 Ноя, 21:37 #480 #869333

>>869329
Не пихай в char флаги. Там выше видео про undefined behavior, и там поясняют, что бывает за то, что ты вдвигаешь 1 в знаковый бит.

Ответы>>869339

03 Ноя, 21:38 #481 #869337

>>869326
> выравнивание и порядок битов в битфилде зависит от компилятора
а мне нужно более менее предсказуемо да еще максимально кроссплатформенно, вот.

Ответы>>869344

03 Ноя, 21:40 #482 #869339

>>869333
>что ты вдвигаешь 1 в знаковый бит.
на ладно, unsigned char. да и что будет? если никто мой байтик не тронет.

Ответы>>869342>>869344

03 Ноя, 21:40 #483 #869342

>>869339
Все хотят тронуть твой байтик

03 Ноя, 21:41 #484 #869344

>>869337
> максимально кроссплатформенно
Макисмально кроссплатформенно парсить бинарные форматы побайтово. Иначе ты можешь напороться и на порядок байтов, и на количество бит в инте, и на выравнивание по умолчанию.

>>869339
> unsigned char
С unsigned ничего не будет, с unsigned все ок.

Ответы>>869348

03 Ноя, 21:44 #485 #869346

>>869311
>HTTP-пакет
Пиздец. А ничего, что TCP — уже стримовый протокол?

Ответы>>869352

03 Ноя, 21:44 #486 #869348

>>869344
>С unsigned ничего не будет, с unsigned все ок.
а без unsigned? поясни.

Ответы>>869357

03 Ноя, 21:48 #487 #869352

>>869346
Я нуфаг, не обессудь.

31 Кб, 744x133

03 Ноя, 21:52 #488 #869357

>>869348
> а без unsigned? поясни.
А без unsigned ты можешь сдвигать вправо только положительные числа. На самом деле, ты вряд ли будешь сдвигать влево именно сам char с флагами, так что я зря прицепился.

Ответы>>869358>>869364

sage 03 Ноя, 21:53 #489 #869358

>>869357
сдвигать влево
фикс

03 Ноя, 21:57 #490 #869364

>>869357
>сдвигать влево именно сам char с флагами
ну там очевидно будет два стула или shl или shr, вот и неопределенность.

Ответы>>869365>>869370

03 Ноя, 21:58 #491 #869365

>>869364
shl/sal быстрофикс

03 Ноя, 22:07 #492 #869370

>>869364
Неопределенность там из-за наличия других архитектур, в том числе и еще не существующих. x86 все в порядке, просто порежутся биты слева. Между SHL и SAL вообще разницы нет.

Алсо, я тут подумал, и понял, что зря вообще прицепился. Прошу прощения. Именно с char в принципе все ок, ибо integer promotions до int во время вычислений.

Ответы>>869380

03 Ноя, 22:19 #493 #869380

>>869370
>SAL
схоронит выпавший битик в флаг, а shl нет. вроде так.

Ответы>>869383

03 Ноя, 22:21 #494 #869383

>>869380
Оба воткнут тот же самый бит в CF.

03 Ноя, 23:49 #495 #869431

Интересует вызов WinAPI по хэшу. Когда мой кодес занимается парсингом таблицы экспорта кернеля, в какой момент останавливать вычисление хэша? Завершаются ли экспортируемый имена нулем? В олли я видел, что эти имена располагаются вплотную без всяких нулей.

Ответы>>869559>>869563

04 Ноя, 08:41 #496 #869559

>>869431
Не помню уже, но должны завершаться. Читай описание формата РЕ-файла, там всё написано.

04 Ноя, 09:39 #497 #869563

>>869431
Количество именованных экспортов лежит в IMAGE_EXPORT_DIRECTORY.NumberOfNames. Имена завершаются нулем.

04 Ноя, 21:47 #498 #869854

анончики, я подсел на дефайны. я все хочу задефайнить. у меня есть повторяющиеся участки кода, я хочу их задефайнить, а не выносить в подпрограмму. это норма?

Ответы>>869857

04 Ноя, 21:49 #499 #869857

>>869854
Не норма. Если только ты не пишешь для древнего компилятора какого-нибудь, делай inline/always_inline и не выделывайся.

Ответы>>869858

04 Ноя, 22:01 #500 #869858

>>869857
вот есть например три цикла подряд, отличающиеся количеством повторений:

c = 10;
while(c--) {
}

c = 20;
while(c--) {
}

c = 30;
while(c--) {
}

хочу тело цикла задефайнить, что в этом плохого? зачем инлайн функция?

Ответы>>869879

04 Ноя, 22:06 #501 #869860

Я напейсал прогу, которая зкаменяет табы на пробелы. Я теперь си программист? Заслужил ли я носить бороду?

Ответы>>869862

04 Ноя, 22:10 #502 #869862

>>869860
>Я теперь си программист?
да
>Заслужил ли я носить бороду?
нет

Ответы>>869867

04 Ноя, 22:26 #503 #869867

>>869862
А что нужно чтобы, бороду заслужить?
Кстати, надо через программку програнть весь мой говнокод на питоне

04 Ноя, 23:00 #504 #869879

>>869858
Сделай инлайн-функцию с циклом, принимающую количество повторений? Или обычную static функцию, компилятор сам разберется.

04 Ноя, 23:14 #505 #869884

Как прописать программу в автозагрузку и что не так в моем коде? http://ideone.com/p8uNtC

Запускаю его как с правами администратора, так и без. Запись в реестре не появляется.

Ответы>>869889

04 Ноя, 23:21 #506 #869889

>>869884
GetLastError и прочая диагностика где? 64-битная ОС и 32-битное приложение? В HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run смотрел?

Ответы>>869893

04 Ноя, 23:26 #507 #869893

>>869889
>64-битная ОС и 32-битное приложение?
Да, так и есть.
>В HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run смотрел?
Нет, что это за ветка? Завтра посмотрю, батарея разряжена

Ответы>>869897

04 Ноя, 23:31 #508 #869897

>>869893
64-битная винда частично редиректит доступ к реестру от 32-битных приложений в отдельную ветку из-за проблем совместимости. Например, чтобы ты случайно не прочитал имя 64-битной дллки какой-нибудь и не плакал, что не получается ее загрузить.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384232(v=vs.85).aspx

Ответы>>869909

04 Ноя, 23:56 #509 #869909

>>869897
И как происходит запуск из той ветки? Почему моя программа не запускается при загрузке системы? Или из той ветки вообще не работает запуск?

Ответы>>869910

04 Ноя, 23:57 #510 #869910

>>869909
Нормально происходит. Посмотри для начала, пишется ли. Может, ты все же не под админом запускаешь?

ПЕРЕКАТ 05 Ноя, 00:00 #511 #869912

>>869911 (OP)
>>869911 (OP)
>>869911 (OP)
>>869911 (OP)
>>869911 (OP)

16 Кб, 1200x624

05 Ноя, 08:00 #512 #870043

>>856777 (OP)
Анон, как мне сменить язык с С++ на просто С, я ультраньфаня

05 Ноя, 18:01 #513 #870367

Ребят, помогите, пользуюсь visual studio 2015 и почему то в ней scan, gets считает за ошибки и нужно писать scan_s, gets_s. Как фиксить это? (в 2008 версии все ок). Спасибо.

Ответы>>871643

32 Кб, 848x585

07 Ноя, 18:31 #514 #871643

>>870367
gets() официально выпилена из стандарта, пользуйся fgets(). Остальные предупреждения отключаются втыканием #define _CRT_SECURE_NO_WARNINGS (или в старых версиях #define _CRT_SECURE_NO_DEPRECATE 1) в самое начало исходника (перед всеми инклудами). Или при компиляции из командной строки -D_CRT_SECUREблаблабла. Или через GUI (пикрелейтед) ошибки превращаются в варнинги. В любом случае, внимания обращать на это не стоит, пользоваться функциями с _s не стоит тем более.

07 Ноя, 21:45 #515 #871772

анон, а где можно почитать про создание собственного представления int-ов, не влезаю в 64 битный, числа большие, на них потом будет пара алгоритмов из теории чисел?

Ответы>>871951

08 Ноя, 00:22 #516 #871951

>>871772
> где можно почитать про создание собственного представления int-ов
В википедии в статье "длинная арифметика". Узнаешь про Карацубу, посмотришь быстрое возведение в степень. Сложение и вычитание в столбик, как в школе (если сумма меньше любого слагаемого, значит был перенос). Хранить лучше в виде структурки с массивом каких-нибудь uint_fast32_t, битность этих самых fast посчитаешь. А вообще, мы уже в новый тред перекатились, сюда вряд ли многие заглядывают.

2481 Кб, 2250x2700

08 Ноя, 12:37 #517 #872144

Привет. Есть говнокод эмулятора на Си: https://github.com/HerculesWS/Hercules/

Как и чем этот говнокод можно покрыть тестами? Есть ли тут те, кто покрывают Си код тестами? Чем пользуетесь, как тестируете, что почитать, что изучить? Короче любой фидбек будет только на пользу.

Ответы>>872179

08 Ноя, 14:45 #518 #872179

>>872144

ПЕРЕКАТ >>869911 (OP)

09 Ноя, 16:23 #519 #872882

http://ideone.com/J4CVCA
Подскажите как сложить два массива.

18 Ноя, 19:44 #520 #877947

ананасы, подскажите, можно ли как нибудь способом узнать указывает ли указатель void * на какое либо место в памяти

301 Кб, 2048x1536

321 Кб, 2048x1536

Ошибка в C. Не могу построить цикл. moon 20 Ноя, 20:58 #521 #879162

Дело в том что в школе началось программирование, а с этим в свою очередь начались проблемы. Проходим циклы. Я прикрепил задачу и её решение на Си. Но я не понимаю что я сделал не так(( Помогите. Заранее благодарен.

301 Кб, 2048x1536

321 Кб, 2048x1536

Ошибка в Си. Не могу построить цикл. moon 20 Ноя, 21:04 #522 #879167

Дело в том, что в школе началось программирование, а В связи с этим-проблемы. Проходим циклы. Я прикрепил два скрина : задачу и её решение. Но выдаёт ошибку. Что я сделал не так? Помогите, заранее спасибо.

Тред утонул или удален.
Это копия, сохраненная 23 ноября 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion