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

Двач.hk не отвечает.
Вы видите копию треда, сохраненную 28 января 2016 года.

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

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

78 Кб, 792x1023

C Programming Language #3 22 Дек, 01:54 #609376 В конец треда | Веб

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

Что читать:

- Классика от Отцов: http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/%7Eats/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: оче годно, батя рекомендует. Дрочим на --analyze.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2015 Community Edition: внезапно этим стало можно пользоваться. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека" (да, в студию в последнее время завезли stdint и stdbool, почти все новые фишки из C11, static_assert и даже юникод). C snprintf все до сих пор плохо. Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (в частности, потыкать threads.h и stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и неполной поддержкой C99.
- Borl... ээээ...

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

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 (4th Edition)" (2014)

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

- https://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/

22 Дек, 02:49 #2 #609388

пук

23 Дек, 07:08 #3 #610139

>>609376 (OP)
Посоны. Че там ~у хохлов~ в новом стандарте?
Шаблоны завезли? Многопоточность завезли?
Как там вообще?

Ответы: >>610151

23 Дек, 08:29 #4 #610151

>>610139
Завезли еще немного юникода (никто не пользуется), многопоточность (никто не пользуется) и костыль вместо шаблонов (погугли _Generic). Ну и еще немного плюшечек туды и сюды. Как-то так.

Ответы: >>611404

Проектирование на Си 24 Дек, 04:23 #5 #610977

Кто-нибудь когда-нибудь видел книжки о том, как правильно проектировать на Си? Что-нибудь вроде Александреску или Б4. Всё что удалось найти это обоссаная книжка про эмуляцию ООП, что и без неё ясно.

Ответы: >>611091, >>611405

24 Дек, 05:30 #6 #610993

>>609376 (OP)
Благословляю хорошую шапку.
мимокрестоанон

24 Дек, 10:56 #7 #611091

>>610977
Си, по сути, остается таким же незамысловатым процедурным языком, каким он был в семидесятых. Правда, теперь в нем есть ограниченная поддержка модулей, опирающаяся на два ключевых слова: extern и static. Поэтому старые добрые книжки по структурному программированию тебе в помощь.

24 Дек, 11:28 #8 #611108

Какие плюсы у чистого си?

Ответы: >>611115

78 Кб, 1252x1080

24 Дек, 11:58 #9 #611115

>>611108
Два плюса.

Ответы: >>611121

24 Дек, 12:12 #10 #611121

>>611115
Шутку про инкремент этому господину.

24 Дек, 13:39 #11 #611170

Посоветуйте, как продумать архитектуру для такой библиотеки.

Надо строить конечное поле Галуа, в котором определены операции над многочленами. Степень расширения не более чем 32 из-за ограничения встроенных типов. Характеристика базового поля равна 2.

Предполагаю, что основой библиотеку будет функция GF(unsigned polynomial), которая возвращает указатель на таблицу индексов на куче. В функции GF надо определить номер старшего бита в переменной polynomial и снять с нее маску. Она нужна для построения таблицы индексов (определение переполнения разрядной сетки).

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

Пусть необходимое поле уже построено, и информация о нем хранится в структуре gf. Как при помощи этой структуры выполнять операции над многочленами типа умножения, возведения в степень, нахождения обратного? Если умножением занимается функция gfmul, то как выглядит ее вызов, если многочлены хранятся в таблице индексов? gfmul(gf->index[5], gf->index[11])? Это же ебаный вырвиглаз. Хранить в структуре gf указатели на функции, которые реализуют арифметические операции над многочленами? То есть, если надо умножить два многочлена, которые представляют собой 5-ю и 11-ю степень порождающего многочлена, я могу захотеть сделать это вызовом gf->mul(5, 11). Поэтому функция mul должна как-то уметь находить в gf->index[] 5 и 11 элемент. Причем она объявлена отдельно, но сама является частью структуры gf и должна уметь пользоваться данными из этой структуры. Выглядит как говно.

На чистом си вообще можно написать что-то сложнее вирусов и консольных калькуляторов?

Ответы: >>611202, >>611321

24 Дек, 14:34 #12 #611202

>>611170
>На чистом си вообще можно написать что-то сложнее вирусов и консольных калькуляторов?
Линукс?

Ответы: >>611209

24 Дек, 14:39 #13 #611209

>>611202
Я имею в виду полезное прикладное ПО, а не говно мамонта. На чем пишутся математические библиотеки? Как люди пердолятся со всем этим говном, не умеющим в архитектуру?

Ответы: >>611214, >>611413

24 Дек, 14:50 #14 #611214

>>611209
Ядро Андроида - говно мамонта?

Ответы: >>611239

24 Дек, 15:14 #15 #611239

>>611214
Это порезанное ядро прыщей => говно мамонта.

Ответы: >>611244

24 Дек, 15:17 #16 #611244

>>611239
https://ru.wikipedia.org/wiki/Ядро_Linux
> Последняя версия: 4.3 (2 ноября 2015)

Ответы: >>611252

24 Дек, 15:21 #17 #611252

>>611244
Ондроед на троечке базируется.
В любом случае, это легасиобразное говно мамонта вызванное недостаточным развитием железа.

Ответы: >>611260

15 Кб, 250x188

24 Дек, 15:26 #18 #611260

>>611252
Профессор, вам до сих печет от успеха Линукса?

Ответы: >>611300

24 Дек, 15:47 #19 #611300

>>611260
Блять эти очки, рубашка и причёска. 100 процентый пидораха нахуй. Наверняка преподаёт в каком-нибудь засраном МГУ и втирает про успешность советской науки даже почти наверняка не читал никаких книг кроме советских. А эта улыбка в конец разозлила. Ещё и линукс ему наверно не угодил по вымышленной причине типа пользуйтесь отечественными аналогами.

Ответы: >>611310, >>611316, >>611411

24 Дек, 15:52 #20 #611310

>>611300
Зекач такой зекач, как можно не знать Таненбаума?
https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%BD%D0%B5%D0%BD%D0%B1%D0%B0%D1%83%D0%BC,_%D0%AD%D0%BD%D0%B4%D1%80%D1%8E

> Эндрю Таненбаум также признан как автор учебников для высшей школы по некоторым областям информатики и вычислительной техники, в своих областях книги считаются избранными как стандарт, в частности:
> Computer Networks, ISBN 0-13-066102-3
> В переводе: Компьютерные сети, ISBN 5-318-00492-X
> Operating Systems: Design and Implementation, ISBN 0-13-638677-6
> В переводе: Операционные системы: разработка и реализация ISBN 5-469-00148-2
> Modern Operating Systems, ISBN 0-13-031358-0
> В переводе: Современные операционные системы, ISBN 978-5-498-07306-4
> Также написал:
> Structured Computer Organization, ISBN 0-13-148521-0
> В переводе: Архитектура компьютера ISBN 5-469-01274-3
> Distributed Systems: Principles and Paradigms, ISBN 0-13-088893-1
> В переводе: Распределённые системы. Принципы и парадигмы ISBN 5-272-00053-6
> Книга «Операционные системы: разработка и реализация» (англ. Operating System: Design and Implementation) и Minix [1] вдохновили Линуса Торвальдса на создание ядра Linux. В автобиографии Just For Fun Торвальдс описывает её как «книга, которая подняла меня на новую высоту». Впоследствии Таненбаум написал распределённую операционную систему Amoeba, полностью реализующую идею микроядра.

Только вот Linux взлетел, а профессор со своими микроядрами соснул.

Ответы: >>614465

24 Дек, 15:55 #21 #611316

>>611300
> 100 процентый пидораха нахуй. Наверняка преподаёт в каком-нибудь засраном МГУ и втирает про успешность советской науки даже почти наверняка не читал никаких книг кроме советских.

Хотя вообще-то возможно, лол. Вот Вирт к примеру типичный пидорашка, любит рассказывать охуительные истории как американские рептилоиды убили европейскую науку. И СССР ему нравится.

Ответы: >>611317

24 Дек, 15:56 #22 #611317

>>611316
>Вот Вирт к примеру типичный пидорашка, любит рассказывать охуительные истории как американские рептилоиды убили европейскую науку
Покажи

Ответы: >>611322

24 Дек, 16:00 #23 #611321

>>611170
>На чистом си вообще можно написать что-то сложнее вирусов и консольных калькуляторов?
С в этом плане не так сильно отличается от любого ООП языка, ну наследования нет (бери в руки препроцессор), шаблонов (препроцессор), ну вместо this->yoba(x) надо писать yoba(this,x), нет перегрузки операторов (вместо a+b надо писать add(a,b)), исключений (вместо add(a,b) надо писать Result add(T a, T b, Tab_result), и возврата кортежей (Result add(T a, T b, Tab_result, T result2), и буфер надо выделять вне функции (вместо vector = yoba(a) надо писать vector=malloc(...);yoba(a, vector)).
Но так все точно так же, определяешь структуры данных, прячешь имплементацию в .c файл, чтобы наружу торчала только struct yoba;, пишешь конструктор, деструктор, и вперед.

Ответы: >>611326

24 Дек, 16:00 #24 #611322

>>611317
Лекция, когда он приезжал в Россию, ЕМНИП в блоге Алены C++ было видео. О том, какая была передовая система Lilith и язык Oberon, но нам навязали Windows и C++.

24 Дек, 16:01 #25 #611324

Аноны, на русском есть годные книги для ньюфагов?

Ответы: >>611325

24 Дек, 16:02 #26 #611325

>>611324
add. по c#

24 Дек, 16:03 #27 #611326

>>611321
Вот смотри более-менее нормальный сишный интерфейс для математики https://github.com/ampl/gsl/blob/master/spmatrix/gsl_spmatrix.h

4487 Кб, 300x325

24 Дек, 17:26 #28 #611404

>>610151
>юникода (никто не пользуется)
збсь, можно будет запиливать нормальную человеческую интернационализацию в прошивках бытовых приборов.

>многопоточность (никто не пользуется)
збсь, можно будет запилисть реализацию "стандартной" многопоточности на базе BuguRTOS

>костыль вместо шаблонов (погугли _Generic)
спорная хрень, пока не знаю, как применить...

школьник-кун

24 Дек, 17:28 #29 #611405

>>610977
Проектирование ПО != паттерны конкретного языка.

24 Дек, 17:32 #30 #611411

>>611300
Как же я проиграл, хоспаде.

950 Кб, 2048x1536

24 Дек, 17:34 #31 #611413

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

Или ты думаешь, что аррхтектура, это когда ООП искаропки?

Тогда у меня для тебя плохие новости!

24 Дек, 20:23 #32 #611552

Подскажите хороший IDE, пожалуйста.

Ответы: >>611553, >>611733, >>611992, >>613434

24 Дек, 20:24 #33 #611553

>>611552
vim

15 Кб, 266x35

24 Дек, 21:26 #34 #611598

>>609376 (OP)
Что делают эти строки?
Что делает тильда?

Ответы: >>611707

24 Дек, 22:25 #35 #611676

1. Записывает в переменную setting результат побитового и переменной Code и макроса-маски SET_IOCTL.
2. Обнуляет в переменной Code биты по маске SET_IOCTL.

Тильда - побитовое не.

24 Дек, 22:56 #36 #611707

>>611598
& - побитовый and. То есть
0110101 &
1100110 =
0100100

~ - побитовый not:
~101010111
=010101000

a &= b - краткая запись a=a&b

24 Дек, 23:41 #37 #611733

>>611552
emacs

sage 25 Дек, 09:24 #38 #611898

Чому если я считываю строку с помощью
fgets(str, 128, stdin);
и использую strcat, например
strcat(str, str1);
он строки объединяет с переносом т.е. выводить будет не
"строка1строка2" а
"строка1
строка2"
а если использую gets(str);
тогда все нормально.
В чем подвох?

Ответы: >>611899, >>612125

25 Дек, 09:24 #39 #611899

>>611898
Сега прилипла

25 Дек, 12:42 #40 #611992

>>611552
acme

Ответы: >>612027

26 Кб, 500x335

25 Дек, 14:03 #41 #612027

>>611992
Пайк, залогиньтесь.

25 Дек, 16:35 #42 #612125

>>611898
Потому что fgets сохраняет \n в буфер, а gets ее ждет, но не сохраняет.

Ответы: >>612129

25 Дек, 16:37 #43 #612129

>>612125
Алсо не используй gets, ты ему не можешь указать размер буфера и может быть buffer overflow.

Ответы: >>612160

25 Дек, 17:11 #44 #612160

>>612129
fgets лучше gets?

Ответы: >>612165

25 Дек, 17:16 #45 #612165

>>612160
Да.

Ответы: >>612166

25 Дек, 17:16 #46 #612166

>>612165
Как тогда строки без переноса объединять?

Ответы: >>612214

25 Дек, 17:49 #47 #612214

>>612166
Ну идея в том, чтобы \n заменить на \0.
[code lang="c"]
char str1 = "world";
char buf[128 + strlen(str1)];

fgets(buf, 128, stdin);

char pos = strchr(buf, '\n');
if (pos != NULL) *pos = '\0';

strcat(buf, str1);
printf("%s\n", buf);
[/code]

165 Кб, 960x634

как связать передвижение авто и светофор? ВСЕМКУМЫСА! 26 Дек, 19:22 #48 #613026

Необходимо реализовать программу "автомобильный перекресток со светофорами"

Светофор у меня будет работать по таймеру
Класс авто будет иметь функции передвижения и остановки.

Как проверять значение светофора? как проверять свободна ли полоса для поворота?

Как связать передвижение авто и светофор?

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

Ответы: >>613184, >>613227

26 Дек, 22:40 #49 #613184

>>613026
Ну там потоки, семафоры, мьютексы... Вот это вот всё.

26 Дек, 23:52 #50 #613227

>>613026
Я б перекресток как граф рассматривал, вершина графа - собственно полоса. Например с правой можно прямо (в идеале не меняя полосы, но можно) и направо только в крайнюю полосу, с центральной только прямо (опять же в свою полосу), с левой только налево в любую полосу (например). Быдлорежим "с левой полосы направо ты тачку мою видел еп" пока не рассматриваем.

В простейшем случае если на ребре графа есть машина, остальные "не занимают" перекресток и стоят за стоп линией, даже если на действие в данной полосе зеленый свет, если посложнее - посчитать, сколько машин вместит одно ребро графа (длина ребра/(длина машины+стандартная дистанция между машинами).

Как-то так, вот такие идеи. По идее рисовать надо, но ломак.

27 Дек, 12:02 #51 #613426

Дано натурально число, записать его цифры. Т.е. 12356 дается, записываю 1 2 3 4 5 6.
Можно просто считывать scanf("%s", &str); и через цикл выводить?

Ответы: >>613485

27 Дек, 12:55 #52 #613434

>>611552
Borland C++ Seattle, скачай на рутрекере.

Ответы: >>613509

39 Кб, 629x429

27 Дек, 14:04 #53 #613485

>>613426

Ответы: >>613493, >>613522

27 Дек, 14:19 #54 #613493

>>613485
У меня к тебе вопросы.
1)Что значит size_t
2)Что значит asprintf и snprintf
3)Что значит putchar

Ответы: >>613506

27 Дек, 14:26 #55 #613502

Тест

27 Дек, 14:32 #56 #613506

>>613493
size_t - это беззнаковый целый тип. Ну типа натуральное число. Я бы мог еще добавить, что он имеет разрядность, достаточную для хранения указателей, но лучше не буду. В принципе, можешь заменить size_t на unsigned int. В большинстве случаев эти типы совпадают.

asprintf - форматированный вывод в строку. Память под результирующую строку выделяется автоматически. Ты даешь этой функции неинициализированный указатель на строку, а она сама выделит памяти столько, сколько нужно. Эта функция является расширением GNU и не входит в стандарт.

snprintf - почти тоже самое, но есть два нюанса. Память под результирующую строку должна быть выделена заранее (хоть на стеке, хоть в куче, хоть в статической памяти). Функция считывает не более n символов, включая завершающий нуль (n передается в качестве второго аргумента). Есть еще sprintf, но я бы не советовал, ибо она не контролирует количество считываемых символов. snprintf входит в стандарт C99.

putchar - вывод одного символа.

Ответы: >>613522, >>613526, >>625910

27 Дек, 14:34 #57 #613509

>>613434
> Borland
> C++
Уходи.

Ответы: >>614262

27 Дек, 14:45 #58 #613522

>>613506
> Я бы мог еще добавить, что он имеет разрядность, достаточную для хранения указателей
Правильнее сказать, что он имеет разрядность, достаточную для хранения размера любого объекта (т.е, для хранения результата sizeof). Размер указателя теоретически может быть как меньше, так и больше размера size_t.

>>613485
> вариант рабов Стандарта
В случае отсутствия asprintf, она реализуется буквально тремя строками. Хорошая, удобная функция, как и strdup, которой тоже в стандарте нет. А вот хранить в size_t что-то, не являющееся размером, количеством или индексом - моветон.

Ответы: >>613530, >>625912

27 Дек, 14:50 #59 #613526

>>613506
зачем size_t, когда есть unsigned int?

Ответы: >>613530

27 Дек, 15:02 #60 #613530

>>613522
>Правильнее сказать, что он имеет разрядность, достаточную для хранения размера любого объекта
Точно. Спасибо. Это я с D уже путаю. Там по спецификации: size_t is an alias to one of the unsigned integral basic types, and represents a type that is large enough to represent an offset into all addressible memory.

>В случае отсутствия asprintf, она реализуется буквально тремя строками.
Если человек спрашивает, что такое putchar, врядли стоит грузить его такими вещами.

>моветон
В данном случае некритично, я считаю.

>>613526
Потому, что тупо пишется короче. Можно, конечно, взять какой-нибудь uint32_t, но это же дополнительный хедер подключать надо.

Ответы: >>613531

27 Дек, 15:10 #61 #613531

>>613530
> Если человек спрашивает, что такое putchar, врядли стоит грузить его такими вещами.
Врать не стану, но про asprintf и snprintf я не очень понял.
Как я понял то что они динамически выделяют память. Ты даешь указатель на строку, а она выделит сама столько сколько надо. Но для чего это используется я не понимаю я до конца не понимаю.

Ответы: >>613559

27 Дек, 15:54 #62 #613557

Немного не по адресу, но как убрать окно список ошибок, чтобы оно вообще не открывалось и осталось только окно вывод?

112 Кб, 1280x775

27 Дек, 15:55 #63 #613559

>>613531
Хорошо. Давай попробуем с коментами.

Ответы: >>613562, >>613563

27 Дек, 15:59 #64 #613562

>>613559
Все, все стало понятно.
Если будут не цифры, а символы, то тогда
len = asprintf(&s1, "%c", str);
Или нет?

Ответы: >>613567

121 Кб, 1280x775

27 Дек, 16:00 #65 #613563

>>613559
Да, забыл еще кое-что. Если ипользуешь asprintf, то потом выделенную память желательно освободить. Обрпти внимание на строки 2 и 22.

Ответы: >>613565

27 Дек, 16:01 #66 #613565

>>613563
Освобождаем чтобы потом можно было повторно использовать s1, ну и чтобы не грузило так сказать?

Ответы: >>613567, >>613585

27 Дек, 16:07 #67 #613567

>>613562
Вот смотри. Есть функция printf. Она принимает формат и список переменных/констант для вывода. Функция выводит все указанные переменные и/или константы на стандартный вывод (чаще всего в консоль) в соответсвии с форматом. То есть, она все конвертирует в строку.

Функция asprintf делает тоже самое. Только она сконвертированные данные сохраняет в строку, а не выводит в консоль.

>>613565
Да. Чтобы не было утечки памяти.
Если тебе уже не нужна строка, сохраненная в s1, то чтобы использовать s1 для хранения другой строки, память надо освободить. Если ты просто вызовешь asprintf второй раз для s1, то функция просто выделит новую память и запишет указатель на новый блок память в эту переменную, но прежняя строка так и останется "висеть в воздухе".

Ответы: >>613571

46 Кб, 713x537

27 Дек, 16:24 #68 #613571

>>613567
Изобразил вот схематично. Может быть, так будет понятнее.

27 Дек, 16:42 #69 #613585

>>613565
Кстати, если тебе это задание дал препод, то мне кажется, он может не принять вариант решения с использованием библиотечной функции. Так что, на всякий случай, иди вот сюда: https://ru.wikipedia.org/wiki/Itoa_%28%D0%A1%D0%B8%29 и списывай реализацию Кернигана и Ричи.

Ответы: >>613594

27 Дек, 16:42 #70 #613586

Ебать.
Неужто в си пытаются вкатиться подобные тупорылые долбаебы котрым на пальцах нужно разжевывать ручное управление памятью.

Мимо жаба-примат

Ответы: >>613592

27 Дек, 16:48 #71 #613592

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

Ответы: >>613602

27 Дек, 16:50 #72 #613594

>>613585
Да не, никто не давал.

27 Дек, 17:24 #73 #613602

>>613592
Хуй знает.
15 лет назад когда мне на 2 курсе преподавали теорию операционных систем, то на сях там был минимум и почти сразу перекатились на кресты.
Жаба-примат.

Ответы: >>613751

6 Кб, 537x206

27 Дек, 17:54 #74 #613614

Чем мое решение плохо?

Ответы: >>613618

27 Дек, 18:03 #75 #613618

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

Алсо, strlen лучше вынести за цикл.

Ответы: >>613623

5 Кб, 484x182

27 Дек, 18:08 #76 #613623

>>613618
А что в этом плохого? Наоборот же, решение более универсальное.
Так ты имел ввиду? А почему так лучше?

Ответы: >>613643

27 Дек, 18:33 #77 #613643

>>613623
Изначальное условие было такое: дано натуральное число. Я это понял как то, что у нас есть двоичное представление этого числа, а не строковое. Но если тебя устраивает строковое представление, то можно и так, если тебя не смущает, что программа фактически работает со строками, а не с числами.

>А почему так лучше?
Потому что семантически это означает, что функция strlen должна вызываться на каждом проходе цикла. А естри strlen вынесена за цикл, то и вызываться будет только один раз. У тебя ведь длина строки не меняется по ходу цикла. Так зачем делать одну и ту же бесполезную работу на каждой итерации? Сейчас считается, что большиснтво компиляторов самостоятельно оптимизирует такие вещи. Тем не менее, в данном случае, вынесение функции за цикл выглядит более логично и является примером хорошего стиля. Причем это не я придумал. Можешь Криса Касперски почитать, например (серия статей "Сишные трюки").

27 Дек, 21:05 #78 #613751

>>613602
За 15 лет общее число программистов увеличилось сильнее, чем число хороших, поэтому если раньше дегенератов было 10%, то сейчас 75.

197 Кб, 764x576

27 Дек, 21:37 #79 #613769

Предстоит в вузике экзамен по языку.
Подскажите какие-нибудь тесты порешать.
Сложнее -лучше.
Наподобии этого.

Ответы: >>614469, >>615517

28 Дек, 04:38 #80 #613981

>>609376 (OP)
> "Си: грязные истории"
Это такая тонкота или одно из двух? Поисковики находят только этот тред, а хочется почитать.

Ответы: >>613997

28 Дек, 05:35 #81 #613990

Сосоны. Написал сканер портов. Где я соснул?
http://pastebin.com/p4m2Sg6i
Выдает ошибку сегментирования.

Ответы: >>613997, >>613998

28 Дек, 05:41 #82 #613991

Если записать int a,b,c,d,e,f,g; то будут ли они занимать те же ячейки памяти, что и элементы int penis[5]; ?

Ответы: >>613992

28 Дек, 05:48 #83 #613992

>>613991
Нет. Они могут и в регистрах быть. Вообще сишечку создавали в качестве абстрактного ассемблера, где намеренно замалчивается конкретная реализация регистров и памяти.

28 Дек, 06:24 #84 #613997

>>613981
Это толстота. Оно на английском http://btdigg.org/search?info_hash=&q=Expert+C+Programming.+Deep+C+Secrets

>>613990
Собираешь с отладочной информацией (gcc -g), пускаешь под gdb, оно говорит, где ты соснул. Ты рассказываешь нам, и мы разбираем проблему.

Ответы: >>614000

28 Дек, 06:31 #85 #613998

>>613990
Но вообще, тебе нужно выделять каждому потоку свой ip, и пробрасывать его через pthread_create если уж ты каждому подключению отдельный тред выделяешь. Алсо, адрес весьма просто инкрементируется одним циклом, а не этим безобразием.

28 Дек, 06:50 #86 #614000

>>613997
http://pastebin.com/yBAnDyVK такая вот хуйня.

Ответы: >>614005, >>615520

28 Дек, 07:25 #87 #614005

>>614000
У тебя ip = NULL, туда пишет sprintf, это нормально? Алсо, после создания потока туда снова пишет sprintf, хотя поток мог еще не успеть воспользоваться значением из буфера.

Ответы: >>614006

28 Дек, 07:27 #88 #614006

>>614005
Да в принципе хуй с ним. Спасибо за помощь, пацаны. Напишу на масме, это быстрее, чем ебаться с сишкой.

Ответы: >>614007

28 Дек, 07:28 #89 #614007

>>614006
Нихуя не быстрее. Пофикси еще переменные i, j, u, y, их никто за тебя нулем инициализировать не будет.

Ответы: >>614010

28 Дек, 07:40 #90 #614010

>>614007
Еще как быстрее. Сейчас увидишь.
Хули там, wsa стартуешь, инкрементируешь ecx и через ustr$ переводишь в текст, потом добавляешь в пременную, добавляешь точку и еще так 4 раза, потом обновляешь и все ок. В поток отправляешь всю хуйню, тот быстро копирует и все. Ну короче элементарно бля. Там ебли намного меньше, чем с сишкой.
кстати зря многие говорят, что масм - язык низкого уровня. он высокоуровневый, как и другие языки ассемблера. Более высокоуровневый fasm, но мне масм больше нравится

Ответы: >>614046

28 Дек, 10:28 #91 #614046

>>614010
Кто тебе мешает абсолютно то же сделать на Си?

for (uint32_t v4addr = 0x7f000001; v4addr < 0x7fffffff; ++v4addr) {
_beginthread(scan_port, 0 (LPVOID) htonl(v4addr));
}

int scan_port(LPVOID arg) {
SOCKADDR_IN sa;
sa.sin_port = htons(12345);
sa.sin_addr.s_addr = (ULONG) param;
socket();
connect();
}

Говнокод, но суть понятна.

Ответы: >>614396

15 Кб, 708x478

28 Дек, 13:21 #92 #614122

Юзер дает нам 2 слова, наша задача определить сколько раз встречается буквосочетание заданной длины с заданной позиции, во втором слове.
Вот мое решение, но оно не верное. И не до конца правильное в плане поставленного условия.

Ответы: >>614396

28 Дек, 17:13 #93 #614262

>>613509
Это ты уходи, он и в Си может.

28 Дек, 19:42 #94 #614396

>>614046
>0x7f000001
Как тонко.

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

Ответы: >>615520

28 Дек, 21:15 #95 #614465

>>611310
Да что вы вспоминаете срач более чем 20-летней давности! Сам Таненбаум с тех не критикует линуксы. Линуксы с давних пор уже не монолитные, а по большей части модульные. Да и с микроядрами он не соснул, так как сделал надежную ОС (правда для учебных целей и встроенных систем). Просто данную идею сложно реализовать, так как найдется немного людей, которые будут создавать с нуля ОС, опираясь на архитектуру.

28 Дек, 21:19 #96 #614469

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

28 Дек, 23:33 #97 #614608

Супец громисты!
Есть один проект и этот проект писан под линуксы с использованием пары либ, в т.ч. libusb. Взял я значит его, сунул в проект кодблоксов под виндами, скачал прекомпиленные mingw либы, положил рядом, настроил в кодблоксах опции сборки (build options -> search directories -> compiler/linker, сунув туда, соответственно пути к директориям include и lib библиотек). И соснул большого, получив целый ворох undefined reference'ов, например:
> undefined reference to `libusb_get_bus_number

Что я сделал не так, кроме использования виндов? Дайте советов мудрых. В гоголе, стеке и прочем уже искал.

Ответы: >>614704

29 Дек, 03:18 #98 #614704

>>614608
> сунув туда, соответственно пути к директориям include и lib библиотек
Так же, как инклуды нужно использовать в исходнике, так и используемые либы нужно явно указать линкеру, а не только место, где их искать. В командной строке ты можешь сделать -lusb, поищи подобное в Code::Blocks.

Ответы: >>615052

668 Кб, 960x720

29 Дек, 18:16 #99 #615052

>>614704
Понял, разобрался, помогло. Большое спасибо, анон!

30 Дек, 10:43 #100 #615517

>>613769
[code]--++cpp[/code]
лолшто, это говно вообще можно скомпилировать?

30 Дек, 10:54 #101 #615520

>>614396
>Как тонко.
Чё тонкого то? Логично, что тестировать программу будешь на локалхосте в начале.

>>614000'
>This page has been removed!
Чё ты исходники поудалял, пидор? Секретные дохуя?

30 Дек, 22:31 #102 #615932

[code lang="c"]
#include "test.h"
[/code]

30 Дек, 22:41 #103 #615948

Здравствуйте.
Есть строка вида 12345,6789,x,0123,"xyi, pizda",333,"333-33",,,,"",,,"",0,98,"",,,, ну и так далее.
Нужно вытаскивать строки между запятыми и кавычками(если они есть) для дальнейшего использования. Реализовать это получилось в теле main, а в отдельную функцию, возвращающую очередную строку между запятыми не получается: вылезает ошибка сегментации. Причём первые строки вытаскиваются и возвращаются нормально, а вот последняя вообще никак.
Сама функция:

char NextstrField(char buf, int posbuf)
{
char str=NULL;

if (!(str=(char)malloc(sizeof(char)BUF_SIZE))){
printf("Out of memory\n");
system("pause");
exit(-1);
}

int i;
unsigned short QwoteActive=0;

for (i=0,memset(str,0,sizeof(str));i<445;++i,(posbuf)++){

if (buf[(posbuf)]=='"'){ // если встречается кавычка
(posbuf)++;
if (QwoteActive) QwoteActive=0;
else {
if (buf[(posbuf)]=='"') break;
QwoteActive=1;
}
}

if ((str=buf[(posbuf)])==',' && !QwoteActive || buf[(posbuf)]==0x0A || buf[(*posbuf)]==0x00){
str='\0';

break;
}
}
return str;
}

Кусок кода в main:
for (posbuf=0;str1[posbuf]!=0;posbuf++){
if (str1[posbuf]=='\0' || str1[posbuf]=='\n') break;
str2=NextstrField(str1,&posbuf);
puts(str2);
}

42 Кб, 1366x728

6 Кб, 456x242

СИ трабл 30 Дек, 23:06 #104 #615980

Привет, Анон! НИд халп!
Ситуация следующая.
Есть функция, в которой создается массив типа char - db и массив указателей на char, указывающие на каждое отдельное слово в db. В первом цикле определяется длина текущего слова strlen(ptr_arr+i) и прибавляется к l - общей длине массива db. В db передается строка: "1;qwe;asd;zxc;2;cvb xc vbc;1823;12;3;m". strtok выделяет лексему в соответствии с разделителями(';' и '\n'), следующая инструкция находит длину l. Ну, и суть, собсно, проблемы: во время трассировки на нулевой итерации внешнего цикла вместо, ожидаемого мной l=2, я, сука, получаю l=4!! Где моя ошибка, подскажи Анон? На пикче код и отладчик. ( использование средств языка весьма ограничено, не обращайте внимание на реализацию )

Ответы: >>616145

31 Дек, 05:15 #105 #616145

>>615980
В ДНК, очевидно же!
l = l+... вместо l+=...
*(ptr_arr+i) вместо ptr_arr
Входные данные у тебя не
"1;qwe.." a "1\0qwe...".
И самое главное:
ptr_arr + i это указатель на указаель на строку, а не указатель на строгу, уебок, блядь.
Когда ты ptr_arr + i его передаешь в strlen, strlen считает "длину указателя", ВНЕЗАПНО оказывается, что это там 4 ненулевых байта подряд...

школьник-кун

Ответы: >>616146

31 Дек, 05:16 #106 #616146

>>616145
ptr_ar должен быть с кватратными скобками, но движок их захавал, бида-пичать!

25 Кб, 279x210

31 Дек, 13:33 #107 #616229

Привет, няши.
Передо мной стоит такая задача: принять по UART несколько пакетов, описание протокола есть, осталось понять, как эффективнее это сделать.
Когда приходит байт - вызывается прерывание.
Как более эффективно складывать в буфер байты и далее находить в нем пакеты?
Вижу 2 варианта, поясните за плюсы и минусы:
1. Кольцевой буфер, вот такой вариант: http://microsin.ru/content/view/1098/44/
как только в нём появится новые данные, в главном цикле забираю байт, прогоняю через конечный автомат, который ищет начало пакета, данные и конец пакета.
2. Кольцевой буфер, который работает так: если массив заполнился, смещает в цикле все элементы буфера (цикл в том же прерывании выполняется), добавляет ноль в конец массива.
Далее можно уже в главном цикле при помощи привычных функций из string.h и stdio.h найти пакет и т.д.
Вот тут походу минус в том, что в прерывании крутится цикл.

Ответы: >>616233, >>616235, >>616236

603 Кб, 1024x683

31 Дек, 13:45 #108 #616233

>>616229
>2. ...
Допустим ищешь ты пакет в главном цикле, работает какой-нибудь scanf и тут БАЦ! приходит новый байт и весь буфер смещается на один элемент.
Что случится?

31 Дек, 13:55 #109 #616235

>>616229
>Как более эффективно складывать в буфер байты и далее находить в нем пакеты?
Конечным автоматом.
> смещает в цикле все элементы буфера
Каким образом? Копированием? Чем это лучше простого сдвига указателя в случае кольцевого буфера? Хуита какая-то.

Ответы: >>616240

31 Дек, 13:57 #110 #616236

>>616229
Какого типа протокол?
Запрос-ответ, или потоковый асинхронный?

Вообще-то оба твои варианта- сорта говна, причём второй полное ровно, а первый может не подойти для протоколов типа запрос-ответ.

31 Дек, 14:05 #111 #616240

>>616235
>Каким образом? Копированием? Чем это лучше простого сдвига указателя в случае кольцевого буфера? Хуита какая-то.
Да, копированием.
>Конечным автоматом.
Это хорошо.
>Какого типа протокол?
>Запрос-ответ, или потоковый асинхронный?
Потоковый асинхронный.
На некоторые пакеты надо отправить что-то в ответ.
В основном только принимаю.

Ответы: >>616246, >>616250

31 Дек, 14:14 #112 #616246

>>616240
DMA есть?
Кольцевые буфера поддерживает?

Ответы: >>616248

31 Дек, 14:21 #113 #616248

>>616246
Да, DMA есть.
Сейчас вот смотрел про DMA: в циклическом режиме заполняет половину буфера, генерируется прерывание, далее заполняется вторая половина и генерируется прерывание.
Т.е. мне надо поставить флаги в прерывании, что типа пора обрабатывать, в главном цикле запустить обработку, при помощи конечного автомата?

Ответы: >>616262

31 Дек, 14:25 #114 #616250

>>616240
Зависит от железки, протокола и требуемого размера буфера, вестимо. Если тебе не лень реализовывать FSM - делай на кольцевом буфере, будет быстро и красиво. Если лень - делай это свое копирование, будет медленно и понятно.

Ответы: >>616252

31 Дек, 14:27 #115 #616252

>>616250
У меня протокол не сложный, с FSM не заебусь.
Вариант с копированием я увидел у одного старого погромиста с опытом, думал - во как красиво то сделано.
Оказалось, что сделано максимум хуево.

31 Дек, 14:49 #116 #616262

>>616248
Тогда делай кольцевой буфер с DMA, если там есть регистр с текущим адресом, то на прерывания можно забить: в главном цикле смотришь, разницу между текущим и прошлым значением регистра, - разбираешь соотв. число байт, разбирать лучше всего автоматом.

Для ответов сделай пинг-понг буферизацию через DMA, один пакет отправляется, - второй пишется в свободный буфер, дальше меняешь буфера местами.

Для пинг-понга можно заюзать прерывания

Ответы: >>616278

31 Дек, 15:15 #117 #616278

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

Ответы: >>616281

31 Дек, 15:19 #118 #616281

>>616278
Это типовое решение тащемта.
У меня так один знакомый хекс-файлы в бутлоадере разбирал.
школьник-кун

Ответы: >>616333

313 Кб, 1021x1280

31 Дек, 16:38 #119 #616333

>>616281
Лови няшку.

Ответы: >>616406, >>616513

sage 31 Дек, 19:18 #120 #616406

>>616333
ФУ БЛЯДЬ ФУ НАХУЙ

Ответы: >>616458

395 Кб, 610x502

31 Дек, 21:19 #121 #616458

>>616406
Нульчую.
школьник-кун

31 Дек, 22:50 #122 #616513

>>616333
Продолжение?

Ответы: >>616564

01 Янв, 04:26 #123 #616564

>>616513
К сожалению нет. Но что-то там произошло, да.

02 Янв, 14:28 #124 #616980

Можно ли делать так:
char F(char s1,char s2)
{
/ тут делаем что-то со строкой s2, используя s1, при этом s1 не изменяется, а s2 - да /
возвращаем s2;
}

int main()
{
/ где-то тут выделяем память для s1 и s2 */
s2=F(s1,s2);
}

Просто мне хочется, чтобы возвращалась именно строка, а не через void. Терзают сомнения, что может что-то случиться плохое.

Ответы: >>616981, >>616985, >>617249

02 Янв, 14:29 #125 #616981

>>616980
Что за нах, куда потерялись звёздочки.

02 Янв, 14:35 #126 #616985

>>616980
можно, но дизайн хуевый получился

02 Янв, 20:41 #127 #617249

>>616980
Если ты возвращаешь s2, то можно не принимать его в качестве аргумента. Конечно же в случае, если s2 полностью выводится из s1 (допустим измененная копия строки). Ты просто можешь вернуть указатель на s2 без выделения памяти для нее в функции main, выделив ее в F(char \*s1).

Ответы: >>617443, >>618414

03 Янв, 00:43 #128 #617443

>>617249
У меня из строки s1 копируются несколько символов подряд в s2.

Ответы: >>617448

03 Янв, 00:49 #129 #617448

>>617443
char \F(char \s1)
{
/ объявляем и выделяем память под s2
/ тут делаем что-то со строкой s2, используя s1, при этом s1 не изменяется /
возвращаем указатель на s2;
}

int main()
{
/объявляем s2
/ где-то тут выделяем память для s1 и заполняем ее чем-то */
s2 = F(s1);
}

Как-то так.

Ответы: >>617449, >>618414

03 Янв, 00:50 #130 #617449

>>617448
Звезда рандомно теряется?
>/объявляем s2
>объявляем указатель на s2

03 Янв, 15:45 #131 #617717

Ищу книгу по С, не такую нудную, как K&R, но и не такую объемную, как у Прата. Желательно коротенькую, описывающую актуальные методы с примерами.

Ответы: >>617722, >>617969

03 Янв, 16:01 #132 #617722

>>617717
> не такую нудную, как K&R
Да ты охуел, я ее на одном дыхании за 2 выходных прочитал.

Ответы: >>617969

03 Янв, 20:33 #133 #617969

>>617717
Может тебе еще программу сделать, которая за тебя пишет код и рассказывает охуительные истории?
>Ищу книгу по С, не такую нудную, как K&R
>но и не такую объемную, как у Прата.
Не осилил или слишком скучно, тогда программирование - это явно не твое.
>Желательно коротенькую, описывающую актуальные методы с примерами.
https://learnxinyminutes.com/docs/c/
>>617722
Двачую. Ньюфаги совсем охуели. Я K&R в десятом классе читал и мне было интересно. Особенно задания выполнять.

03 Янв, 22:31 #134 #618072

Мне тоже было очень интересно выполнять задания из кнр.

Вообще Си уютный язык. И ламповый.

К сожалению программирование меня всё больше и больше печалит засильем скриптовых языков, которые порождают такие программы как Firefox, при открытии с пустой вкладкой сжирающий 350 мегабайт оперативки. И всех всё устраивает: докупим ещё планочку на 8 гигов оперативы и норм.

Может я старею, но меня всё больше тянет на что-то старое доброе, чем на ту парашу, которую остервенело клепают обезумевшие рынки, которым кровь из носу нужно расти каждый год.

Ответы: >>618149

14 Кб, 1393x421

03 Янв, 22:41 #135 #618078

Господа сишники, подскажите, где можно взять книжку, описанную на пикрелейтед? Может, в бумажном варианте есть у кого? Нигде не могу найти.

Ответы: >>618093

03 Янв, 23:01 #136 #618093

>>618078
Зачем тебе именно эта?

Ответы: >>618103

03 Янв, 23:08 #137 #618103

>>618093
На неё ссылались некоторые источники, хотелось бы ознакомиться.
Я модифицирую игру для PS1, приходится ковырять экзешники, читая много mips кода. А игры писались на сишечке, хотел упростить себе жизнь.

Ответы: >>618126

03 Янв, 23:25 #138 #618126

>>618103
Замени её «Архитектурой компьютера» Эндрю Таненбаума.

Ничего особенного там скорее всего нет, кроме оптимизаций, т.е. рассказа о том, что вычислительные действия вроде:
A + B + X + Y
могут быть выполнены не за три команды, а за две, как:
(A + B) + (X + Y)
где действия в скобках займут один такт процессора, и сложение между скобками займёт ещё один такт, MIPS это умеет.

Похожим образом ускоряются и операторы условия, т.к. процессор вместо флажков состояния ("conditional
flags") использует обыкновенные регистры.

Взято из книги «Understanding and Writing Compilers», Richard Bornat.

Ответы: >>618129

03 Янв, 23:30 #139 #618129

>>618126
А где мне задавать вопросы? Ну, понимаешь, это такая сфера деятельности, где некоторые ответы можно вечность искать. Живого ассемблер треда нет, а самостоятельно понять "какой код на си мог при компиляции привести к ЭТОМУ" я не всегда могу.

Ответы: >>618136

03 Янв, 23:42 #140 #618136

>>618129
> Живого ассемблер треда нет
Оживи >>600262 (OP) этот.

Ответы: >>618140

03 Янв, 23:48 #141 #618140

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

03 Янв, 23:55 #142 #618149

>>618072
Согласен. Я хоть не профессионал, но на Си, как любителю мне очень нравится писать. Все прозрачно, как напишешь так и будет. Теория заключается в понимании работы железа. Можно написать абсолютно все, что пожелаешь. Радует, что замену сишечке так и не нашли.
>Firefox, при открытии с пустой вкладкой сжирающий 350 мегабайт
У меня съедает примерно 90Мб на старте(это под линем). Что я делаю не так?
>которую остервенело клепают обезумевшие рынки, которым кровь из носу нужно расти каждый год.
Нужны же ИННОВАЦИИ!!! Даже если эти инновации представляют из себя пропиаренную переделку уже давно известной технологии.

Ответы: >>618162

04 Янв, 00:07 #143 #618162

>>618149
Во вы два долбоеба. Работобыдло из офисов повывалило, видимо.

04 Янв, 12:49 #144 #618414

>>617249
>>617448
>можешь вернуть указатель на s2 без выделения памяти для нее в функции main, выделив ее в F
Всё-таки мне этот момент непонятен. Если я возвращаю указатель из функции, программа крашится. Там же неизвестно что хранится по адресу, после завершения функции? Получается, нужно объявлять в самой функции как static или что?

Ответы: >>618422, >>618829

04 Янв, 12:56 #145 #618422

>>618414
Ой, нет всё нормально. Крашится, когда функция void, а не char* и в неё же я передавал указатель на строку и выделял там память.

04 Янв, 23:36 #146 #618829

>>618414
>Там же неизвестно что хранится по адресу, после завершения функции?
Известно. Функция возвращает указатель на участок памяти, с которым ты работал. При завершении работы, функция самостоятельно не освобождает память.

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

05 Янв, 00:55 #147 #618881

Поясните за сборку пакетов, допустим HTTP. Я правильно понимаю, что необходимо просто отправлять строку в которой различные поля разделены при помощи \r\n? Или можно как-то иначе это делать? И есть ли готовые библиотеки для работы с протоколами?

Ответы: >>618894

05 Янв, 01:15 #148 #618894

>>618881
> просто отправлять строку в которой различные поля разделены при помощи \r\n
Да.

> библиотеки
Ну curl же.

Ответы: >>618930

05 Янв, 03:07 #149 #618930

>>618894
Благодарю.

06 Янв, 04:16 #150 #619834

Я тут хотел спросить. Допустим есть у меня набор каких-то неизвестных данных. Мне необходима возможность по-разному их интерпретировать (допустим как int, char, double, struct smth). Как мне это сделать? Допустимо для этого выделить динамически память под void (звезда) или char (звезда) и затем при помощи указателей(int, char, double, struct smth) пройтись по этим данным? Или это будет плохим способом решения?

Ответы: >>619836, >>619969, >>620081, >>625918

06 Янв, 04:23 #151 #619836

>>619834
С совершенно произвольными данными ничего не сделаешь. Рассказывай подробнее, что сделать надо.

06 Янв, 13:24 #152 #619969

>>619834
Используй union.

Ответы: >>620081

06 Янв, 16:00 #153 #620075

Посоветуйте хороший, годный конпелятор си типа tcc, но не с таким парашным синтаксисом ассемблера.

Ответы: >>620081

06 Янв, 16:19 #154 #620081

>>619834
Стандарт запрещает любые подобные выебоны (в том числе и >>619969 union). Чтобы все было пиздец как кроссплатформенно, нужно читать побайтово и вручную собирать многобайтовые типы (сдвигами и т. д., что особенно весело для какого-нибудь double).

Если ты нормальный человек, то указатели вполне ок, озаботься только выравниванием и endianess - будет достаточно переносимо.

>>620075
Советую взять любой понравившийся ассемблер (nasm, fasm), писать ассемблерный код отдельным модулем (файлом) и потом линковать к основной программе. Когда ты осознаешь, что код на ассемблере можно заменить интринсиками, проще будет его найти и переписать.
Алсо, в tcc дохуя неисправленных багов и напрочь отсутствующий оптимизатор. Единственное, за что его следует любить и уважать, так это за -run.

Ответы: >>620222, >>620288, >>625921

06 Янв, 19:11 #155 #620222

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

06 Янв, 20:33 #156 #620288

>>620081
>Алсо, в tcc дохуя неисправленных багов и напрочь отсутствующий оптимизатор. Единственное, за что его следует любить и уважать, так это за -run.
Тогда посоветуй еще какой-нибудь компактный компилятор, который генерировал бы маленькие экзешники. Хеллоуворлд, скомпилированный tcc, весит всего 2.5 кб, почти как на ассемблере. Другие компиляторы даже с оптимизациями меньше 25 кб не генерят.

Ответы: >>620296, >>620305, >>620315

06 Янв, 20:46 #157 #620296

>>620288
>Другие компиляторы даже с оптимизациями меньше 25 кб не генерят.
$ clang -O3 helloworld.c -o helloworld && du --apparent-size -b helloworld
6600 helloworld
$ gcc -O3 helloworld.c -o helloworld && du --apparent-size -b helloworld
6720 helloworld
>почти как на ассемблере
$ clang -O3 helloworld.s -o helloworld && du --apparent-size -b helloworld
6568 helloworld
$ gcc -O3 helloworld.s -o helloworld && du --apparent-size -b helloworld
6704 helloworld
Ты ведь понимаешь что эти 6 кб это всякие таблицы релокаций и прочая ELF-хуйня? От нее не избавишься.

Ответы: >>620297

06 Янв, 20:48 #158 #620297

>>620296
А впрочем можно вот так сделать.
$ clang -O3 helloworld.c -nostdlib -lc -o helloworld && du --apparent-size -b helloworld
3424 helloworld
$ cat helloworld.c
#include <stdio.h>
#include <stdlib.h>

void _start(void)
{
printf("Hello, World!\n");
exit(0);
}

Ответы: >>626146

06 Янв, 21:11 #159 #620305

>>620288
tcc просто динамическая линкуется к рантайму. Рантайм в Windows весит 400 КБ (используется древняя MSVCRT.DLL, что само по себе плохо).
Можно взять Pelles C из шапки, с -MD он тоже сгенерит 2 КБ плюс 300 КБ рантайм (если статически линковать рантайм, будет что-то около 30 КБ минимум) . Можно взять Visual C++, он генерирует 4.5 КБ плюс рантайм (со статической линковкой 50 КБ). А можно перестать загоняться по поводу размера файла.

06 Янв, 21:21 #160 #620315

Итак. Почему я долбоеб?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void print(void);
int i;
int main(void)
{
char buff = malloc(1000);
pthread_t t[2];
pthread_create(t[1], NULL,(void ()(void )) print, NULL);
pthread_create(t[2],NULL,(void ()(void ))print,NULL);
}

void print(void)
{
i++;
printf("huyhuyhuy\n %d", i);
}

//ну кроме того, что с типом функции объебался. Ну похуй. Это насрать. Компилируется без ошибок и прочей хуйни. У меня в принципе ни одна программа скомпилированная не запускается. Я писал сканнер портов и нихуя. Написал другой. опять нихуя. Включил kdbg и там у меня показывает ошибку сегментации ДО входа в майн. Что за нахуй?
Компилирую gcc -pthread [sourcename].c

>>620288
Можно дос стаб удалить и будет еще меньше. А так да. я под венду пишу на масме, потому что ебал я писать на сишке там. У меня там MessageBox по 64кб выходит. Я помнится, писал под DOS когда-то, так с тех пор я вообще каждый байт блядь пытаюсь сэкономить. Даже в сишке ассемблерными вставками пользуюсь. Вообще, используй __imp_MessageBoxA@16 и не еби себе мозг. Хотя лучше, конечно, пиши на масме под венду. Под прыщами на нем не попишешь.

Ответы: >>620317, >>620341

06 Янв, 21:22 #161 #620317

Хули у меня все указатели обрезались, я не понял бля? >>620315-кун

Ответы: >>620319

06 Янв, 21:22 #162 #620319

>>620317
Абу просто жабогосподин. Вот и режет указатели. Ибо нехуй.

06 Янв, 21:24 #163 #620322

Почему моя функция strcmp работает неправильно?
https://ideone.com/VWF7Ln

Ответы: >>620328, >>620329, >>620338, >>620385

sage 06 Янв, 21:25 #164 #620324

>дос
>MessageBoxA
>16
>пиши на масме под венду
Пиздец, куда я попал?

Ответы: >>620328

06 Янв, 21:29 #165 #620328

>>620322
int strcmp(char s, char t){
\twhile(s++ == t++)
В цикле while указатели убери. У тебя это итак указатели. Ты просто адрес инкрементируй, а не то, что находится в указателе, киса.
>>620324
Долбоеб. 16 - это кол-во байт передаваемых в MessageBoxA(dword hwnd, dword capture, dword text, dword status(или как там)); дебильный блядь.
А ты думал это под дос, сука, мессадж бокс блядь? Охуеть не встать. Иди блядь мсдн читай, уебок.

Ответы: >>620333

06 Янв, 21:29 #166 #620329

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

Ответы: >>620332

06 Янв, 21:31 #167 #620332

>>620329
Да мне просто интересно писать говно.

06 Янв, 21:31 #168 #620333

>>620328
>Иди блядь мсдн читай, уебок.
А оно мне надо?
>кол-во байт передаваемых
>2016
>x86-64
>не передавать аргументы через регистры

>MessageBoxA
>A

Ответы: >>620335

06 Янв, 21:34 #169 #620335

>>620333
Кто тебе сказал, что через регистры, уебок? А ты не слышал о том, что можно передавать адрес операнда, который находится в переменной? Ты не слышал про макро среду языков ассемблера различных? Не? И если что в таблице экспорта именно так обозначается все. Ебать ты даун, хуево быть тобой. Не надо ему мсдн читать, бля. Охуеть не встать, с какими ебланами я на борде сижу.

Ответы: >>620342

06 Янв, 21:35 #170 #620338

>>620322
https://ideone.com/YPmvYF

Ответы: >>620382

06 Янв, 21:37 #171 #620341

>>620315
>Почему я долбоеб?
Тебе все перечислить?
1. Не проверяешь возвращенный malloc-ом результат на NULL.
2. Не освобождаешь память.
3. А нахуя ты ее вообще выделил-то?
4. Массив t не инициализирован перед использованием, привет undefined behavior.
5. Первый аргумент pthread_create - не просто какой-то произвольный указатель. По этому указателю будет записан ид созданного потока. Собственно, у тебя падает как раз потому что этот ид записывается в рандомное место памяти.
6. print кастуется к несовместимоу типу.
7. После создания потока его надо где-то либо join-ить, либо detach-ить.
8. main должна возвращать int, но return нигде не видно.
9. print неправильного типа - она не принимает аргументов, а должна принимать один типа "указатель на void".
10. i не атомарная, поэтому в i++ возникает race condition между потоками.
11. print должна возвращать указатель на void, но return опять нигде нет.
12. Компилируй gcc -Wall -Wextra -Werror -pthread yoba.c -o yoba, тогда гцц тебе сразу все это укажет.

Ответы: >>620344, >>620345, >>620365, >>620513

06 Янв, 21:39 #172 #620342

>>620335
>Кто тебе сказал, что через регистры, уебок?
Я и говорю, какой мудак в 2016 на 64-битном хуе86 передает не через них? Шиндовсбляди, видимо.
>А ты не слышал о том, что можно передавать адрес операнда, который находится в переменной?
Это тут вообще при чем?
>Ты не слышал про макро среду языков ассемблера различных?
Ты не слышал про си?

Ответы: >>620350

06 Янв, 21:42 #173 #620344

>>620341
А, еще i не инициализирована.

06 Янв, 21:42 #174 #620345

>>620341
Ты не углядел главное - t[2] - это вне массива.

06 Янв, 21:45 #175 #620350

>>620342
> Шиндовсбляди, видимо.
Ты не поверишь, но 64-битный fastcall в шинду завезли точно такой же.

Ответы: >>620352

06 Янв, 21:47 #176 #620352

>>620350
>64-битный fastcall
Во-первых он называется System V ABI.
Во-вторых в шиндовсе опять свой стандарт. Он, кстати, довольно интересный - первые 4 аргумента передаются через регистры, но 32 байта на стеке под них все равно выделить надо (но не надо заполнять), причем даже если функция принимает меньше 4 аргументов. Остальные аргументы идут над этими 32 байтами.

06 Янв, 21:53 #177 #620355

http://pastebin.com/6B9cyKs0 в общем вот он мой сканер портов. Такая вот хуйня. ЧЯДНТ?

Ответы: >>620357, >>620359, >>620360, >>628627

06 Янв, 21:56 #178 #620357

>>620355
22 - стек разве позволяет взять такой огромный размер.
Дальше лень смотреть. Говнокод я лютый вижу здесь.
мимокрок

06 Янв, 21:58 #179 #620359

>>620355
>ЧЯДНТ?
>pthread_t t[0x7fffffff]
http://ideone.com/rQVWum
Дальше не читал, хуйня полная написана.

Ответы: >>620362

06 Янв, 21:59 #180 #620360

>>620355
> pthread_t t[0x7fffffff];
Всегда так делаю.

> ЧЯДНТ
Не прочитал ничего про многопоточное программирование. Например, у address все шансы затереться раньше, чем поток им воспользуется. И я тебе уже об этом писал в середине треда.

06 Янв, 22:05 #181 #620362

>>620359
Всего лишь 4Гб. Тебе жалко что ли? Или компуктер не позволяет?

Ответы: >>620364

06 Янв, 22:12 #182 #620364

>>620362
Лол, а я и не подумал. Поменял значение, все запустилось, лол.

Ответы: >>620369

06 Янв, 22:12 #183 #620365

>>620341
>Не проверяешь возвращенный malloc-ом результат на NULL
Боишься, что на твоем калькуляторе не хватит памяти для выделения?

Ответы: >>620368, >>620371

06 Янв, 22:14 #184 #620368

>>620365
Про квоты слышал когда-нибудь?

06 Янв, 22:14 #185 #620369

>>620364

быстрофикс:правда нихуя не происходит кроме нагрузки проца в 1 поток.

06 Янв, 22:14 #186 #620371

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

Ответы: >>620376

06 Янв, 22:23 #187 #620375

Возник вопрос, а нужно ли вообще распараллеливание для сканера портов? Разве там не упирается все в сетевуху?

Ответы: >>620377, >>620429, >>621852

06 Янв, 22:23 #188 #620376

>>620371
> предусмотреть такую ситуацию
И свалиться не просто, а успев выругаться в консолечку. Потому что в программе серьезнее хелловорлда выругаться в логи может не получиться, и показать уведомление может не получиться, и даже завершиться красиво может не получиться. Поэтому если программа не сервис, мелкие аллокации проще всего вообще не проверять и в том редком случае, когда память кончится, просто свалиться.

Ответы: >>620378

06 Янв, 22:25 #189 #620377

>>620375
Спрашивающий - новичок. Он не может в неблокирующие сокеты. И в сырые сокеты тем более не может.

Ответы: >>620397, >>620747

06 Янв, 22:25 #190 #620378

>>620376
>Потому что в программе серьезнее хелловорлда выругаться в логи может не получиться, и показать уведомление может не получиться, и даже завершиться красиво может не получиться.
А может и получиться. Гвидон вон вполне нормально бросает MemoryError в таких случаях.

Ответы: >>620379

06 Янв, 22:28 #191 #620379

>>620378
Да и сваливаться ведь не обязательно. Иногда же бывают случаи, когда невозможность выделения памяти не является критической ошибкой. В таком случае, можно просто залочить возможность на некоторое время или же просто выделить меньше памяти, если это возможно.

06 Янв, 22:33 #192 #620382

>>620338
Ну охуеть, должно быть 0

Ответы: >>620384, >>620390

06 Янв, 22:35 #193 #620384

>>620382
return s - t;
'y' - 'z' == -1
Где ошибка? Возвращает разницу, когда находит не совпадение.

Ответы: >>620386

06 Янв, 22:36 #194 #620385

>>620322
У тебя же есть реализованный strlen
if (strlen(s)<strlen(t)) return -1;
if (strlen(s)>strlen(t)) return 1;
if (strlen(s)==strlen(t)) return 0;

Ответы: >>620390

06 Янв, 22:37 #195 #620386

>>620384
man strcmp

Ответы: >>620390, >>620396

06 Янв, 22:41 #196 #620390

>>620385
>>620382
>>620386
Что несешь-то? strcmp это лексикографическое сравнение, а не просто по длине.

Ответы: >>620394

06 Янв, 22:44 #197 #620394

>>620390
Ну тогда хуй с ним

10 Кб, 665x80

06 Янв, 22:46 #198 #620396

>>620386
И что не так? Работает, как и библиотечная.

Ответы: >>620402

06 Янв, 22:49 #199 #620397

>>620377
Поясни-ка мне за сокеты. Почему select возвращает 1, а данных для чтения нет?

FD_ZERO(&check);
FD_SET(Socket, &check);
if (select(0, &check, 0, 0, &timeout) > 0)
{
ioctlsocket(bind_socket, FIONREAD, &read_byte); // != SOCKET_ERROR
}
Почему read_byte == 0? WSAGetLastError() возвращает 0.

Ответы: >>620399

06 Янв, 22:50 #200 #620399

>>620397
man select

Ответы: >>620406

06 Янв, 22:52 #201 #620402

>>620396
Сижу, обзавшийся своим же говном. Извините

06 Янв, 22:53 #202 #620405

Ебать вы тут насрали.

06 Янв, 22:54 #203 #620406

>>620399
И что там нового для меня? Возвращается 1, а данных нет. По таймауту не отваливается.

Ответы: >>620409

06 Янв, 22:56 #204 #620408

Как правильней писать time(0) или time(NULL)?

Ответы: >>620410

06 Янв, 22:56 #205 #620409

>>620406
Может быть, тебе FIN приходит просто?

Ответы: >>620421

06 Янв, 22:57 #206 #620410

>>620408
NULL, подчеркивая, что это должен был быть указатель.

Ответы: >>620412

06 Янв, 22:59 #207 #620412

>>620410
Открыл страницу в man'e и понял уже. Прошу прощения за столь глупый вопрос.

06 Янв, 23:09 #208 #620421

>>620409
FIN: No more data from sender
Типа нет больше данных от отправителя?

Ответы: >>620423, >>620557

06 Янв, 23:11 #209 #620423

>>620421
Ты хоть на локалхосте проверяешь?

Ответы: >>620429

06 Янв, 23:19 #210 #620429

>>620423
Да, а что? Если что это >>620375 не мой пост. Мне от браузера данные надо получить, у меня SSL соединение устанавливается нормально, а заголовок дождаться не получается.

Ответы: >>620432

06 Янв, 23:23 #211 #620432

>>620429
В древней опере тестирую, всё почти нормально. Хотя бы первый запрос обработать получается, а keep-alive по таймауту завершаю. А с хромом ни в какую. Он пересоздаёт подключение, запрашивает одну страницу, а остальные отваливаются на select с нулём байт и не срабатывает таймаут.

06 Янв, 23:37 #212 #620450

Поясните по поводу assert(). Я правильно понимаю, что его стоит использовать только на этапе отладки? То есть оттестил программу, а когда релизишь, то надо ставить #define NDEBUG?

Ответы: >>620557

06 Янв, 23:51 #213 #620467

В Pellec C размер шрифтов никак не увеличивается? Ебаный вырвиглаз же. Зато компилируется быстро.

Ответы: >>620471

06 Янв, 23:52 #214 #620471

>>620467
Сам нашел. Обычно шрифт можно было с клавиатуры увеличивать, а тут никак.

07 Янв, 00:47 #215 #620513

>>620341
>Не освобождаешь память.
Если память используется на протяжении всей работы программы, какой смысл её освобождать по завершении программы? Она будет автоматически освобождена операционной системой.

Ответы: >>620553

07 Янв, 01:16 #216 #620553

>>620513
>Если память используется на протяжении всей работы программы
Как часто такое бывает? Если маленькое приложение, ладно. Но вообще, всегда рекомендуется это делать явно для обеспечения все той же переносимости. Да и разве сложно сделать это?

Ответы: >>620557

07 Янв, 01:23 #217 #620557

>>620421
> нет больше данных
Да, например если удаленный хост закрыл соединение (сделал shutdown(..., SD_SEND)), по TCP уйдет FIN, select на другой стороне прервется, а в сокете будет 0 байтов.
Может быть, у тебя в реализации протокола проблемы, и оно просто не хочет с тобой разговаривать?

>>620450
Да, именно так. Если не нравится, можешь сделать общий хедер и инвертировать в нем условие (#ifndef DEBUG #define NDEBUG ... #endif). И потом собирать с -DDEBUG, а релиз без.
Ну а оставлять ли ассерты в релизах - дело твое. Только не используй их по назначению - для проверки соблюдения контракта, а не вместо обработки ошибок.

>>620553
Такое бывает часто, в любой мелкоутилитке. При нормальном выходе рантайм обязан сделать и flush файлам, и закрыть их потом, и память освободить.

07 Янв, 11:36 #218 #620747

>>620377
>сырые сокеты
А они разве нужны для сканера портов? Если я не ошибаюсь, сырые сокеты просто позволяют тебе собрать свой пакет, со своими параметрами, не прибегая к помощи ядра. А для сканера портов не будет достаточно, просто слать TCP и/или UDP пакеты и просто ждать ответа? Или есть нюансы?

Ответы: >>620781

07 Янв, 13:28 #219 #620781

>>620747
Существует несколько способов сканирования. Полноценная установка соединения - самый медленный из них.

Ответы: >>620792

07 Янв, 13:56 #220 #620792

>>620781
Ладно. Попробую почитать на досуге подробнее о сырых сокетах. Пока мне на голову приходит только: 1) отправить SYN; 2) дождаться SYN/ACK; 3) перейти к следующему порту, не отправляя ACK.

Ответы: >>620893

07 Янв, 17:17 #221 #620893

>>620792
Да, именно так. Только желательно на SYN/ACK отвечать RST, чтобы все были счастливы а то мало ли, хост решит, что это у тебя SYN flood такой и обидится. Алсо, у нас тут тредик про сишечку. А про хакеров где-то рядом тонет.

07 Янв, 17:54 #222 #620911

> шланг
> компилятор

Для гомосексуалистов разве что.

Ответы: >>620936

07 Янв, 18:39 #223 #620936

>>620911
У штульманавта пригорело?

07 Янв, 20:05 #224 #620994

Может кто дать исходники любого консольного ftp-клиента на Си? Пилю свой велосипед, но очевидно, что я что-то делаю не так.

Ответы: >>621005

07 Янв, 20:09 #225 #621005

>>620994
apt-get source <ftp-client-name> если линукс.
Если windows, гугли свободные ftp-клиенты, заходи на официальный сайт и качай исходники.
https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_FTP-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B

Ответы: >>621018

07 Янв, 20:29 #226 #621018

>>621005
Спасибо. Собственно, проблема в том, что пока-что программа работает в диалоговом режиме - я ввожу команды протокола, а сервер мне отвечает. Вот тут и появляются проблемы. Или программа виснет на recv() после отправки первой же команды, или при использовании неблокирующего сокета recv() как-то странно данные возвращает, с запаздыванием на пару отправленных команд. Скорее всего, это я накосячил, но как поправить - непонятно.

Ответы: >>621027

07 Янв, 20:46 #227 #621027

>>621018
Покажи код, может быть? Попробуй написать простой телнет-клиент для начала и потестить на локалном netcat - сразу увидишь, где и как у тебя что отправляется. Потом этим же телнет-клиентом уже к ftp вручную коннектиться попробуй.

Ответы: >>621032, >>621037

07 Янв, 20:50 #228 #621032

>>621027
Собственно, у меня пока только это и есть (телнет клиент). Код завтра скину, еще помучав.

07 Янв, 20:56 #229 #621037

>>621027
А, и про netcat - спасибо, не знал о таком.

07 Янв, 22:43 #230 #621138

https://ideone.com/VfABvJ
ЧЯДНТ?

Ответы: >>621173, >>622165

07 Янв, 23:26 #231 #621173

>>621138
В си с юникодом традиционно все плохо (до C11).
Конкретно не так ты указываешь format specifier - 'c' - это char, а чтобы был wchar_t, надо '%lc'. Дальше тебе стоит кодировку исходника. Например, в гцц -finput-charset по умолчанию UTF-8, другие компиляторы не будем показывать пальцем могут ожидать какую-то другую.
А если у тебя шиндоус, тебя ждут проблемы в MSVCRT, баги в реализации консоли и прочие радости. В определенный момент ты решишь написать свой велосипед для вывода в консоль под виндой, я гарантирую это.

Ответы: >>621184

07 Янв, 23:37 #232 #621184

>>621173
gcc rus_alpha.c -finput-charset=UTF8
Так? Если да, то мне вместо символов выводит знаки вопроса. Кодировка в терминале (xfce4-terminal) также UTF-8.

Ответы: >>621188

07 Янв, 23:42 #233 #621188

>>621184
Сделал setlocale(LC_CTYPE, "") и заработало. Это корректный способ?

Ответы: >>621192, >>621193

07 Янв, 23:44 #234 #621189

Как сделать чтобы sleep() принял float со значением 0.5 вместо округленного int

Ответы: >>621190

07 Янв, 23:45 #235 #621190

>>621189
usleep()
Принимает микросекунды.

07 Янв, 23:52 #236 #621192

>>621188
https://ideone.com/lPPK4M
С %с всё корректно, лол.

Ответы: >>621193

07 Янв, 23:57 #237 #621193

>>621188
Хуй знает. По идее, да. Зачем тебе это вообще? Выводи UTF-8 через printf, это работает и не требует усилий.

>>621192
С '%c' оно берет из аргументов int и преобразовывает к signed char. А если из юникодной кириллицы отбросить старшие биты, ничего похожего на нормальный результат получиться не должно в принципе.

Ответы: >>621197

08 Янв, 00:04 #238 #621197

>>621193
Через printf не работает.
https://ideone.com/veJvei
Или что-то не так?

Ответы: >>621207

08 Янв, 00:10 #239 #621207

>>621197
А, ну если тебе с символами работать, то конечно так не получится разве что делать работу %lc вручную, wctomb, все дела. А просто вывод строк работает если терминал UTF-8.

Забей, это был плохой совет.

08 Янв, 00:25 #240 #621228

https://ideone.com/VfABvJ
Оу... Оказывается что в юникоде "ё" вне последовательности... Как все сложно то.

Ответы: >>621234

08 Янв, 00:47 #241 #621234

>>621228
Всё ещё сложнее. "й" и "ё" можно записать двумя способами.

Ответы: >>621252

08 Янв, 01:06 #242 #621252

>>621234
Всмысле? Ты имеешь ввиду это:
https://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#.D0.9C.D0.BE.D0.B4.D0.B8.D1.84.D0.B8.D1.86.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B8.D0.B5_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D1.8B Впрочем. Придется ознакомится наверное поближе с чудесным миром кодировок.

08 Янв, 14:45 #243 #621579

Не совсем по теме треда, но. В общем, не могу понять, как в winsock узнать, есть ли данные, которые сокет принял и можно их оттуда забирать.

Ответы: >>621690

08 Янв, 15:05 #244 #621588

Как запомнить про префиксную и постфиксную форму записи? Всё время путаюсь...

Например, хочу организовать такой крутой цикл в одну строчку:
while (++i<len && !isalpha(inq));

Как будет себя вести i ?

Ответы: >>621709, >>621713, >>621777

08 Янв, 16:50 #245 #621690

>>621579
Чтобы дождаться данных select(0, ..., ..., ..., &timeout);
Если возвращает >= 1, то данные есть. Если ты передавал больше 1 сокета, то используй макрос FD_ISSET. Если только один, то пришли данные на этот сокет. Если < 0, то отвалилось по таймауту или какая-то ошибка.

Чтобы узнать, сколько на данный момент доступно данных ioctlsocket(bind_socket, FIONREAD, &read_byte);

А если ты мне ответишь на вопрос, почему select возвращает 1, а ioctlsocket ноль, буду очень благодарен.

Ответы: >>621777, >>621913

08 Янв, 17:02 #246 #621709

>>621588
Сначала инкрементируется, затем сравнится.
Если префиксная форма, то инкрементируется перед операцией, если постфиксная — после выполнения операции над i.

08 Янв, 17:06 #247 #621713

>>621588
Что именно у тебя вызывает сложности? Префиксный инкремент/декремент выполняется до обращения к переменной, постфиксный, соответственно, после. В твоём примере произойдёт увеличение i на единицу и сравнение его с len, поэтому ты не обработаешь последний символ. Здесь надо постфиксный. Или местами поменять условие, т.к. у тебя i будет указывать на следующий символ за нужным тебе. Ещё неплохо бы inq изменять каким-то образом в сторону увеличения.

>хочу организовать такой крутой цикл в одну строчку
Оно, конечно, круто while (∗s++ = ∗t++), но, как по мне, лучше избегать таких конструкций.

Ответы: >>621777

08 Янв, 19:16 #248 #621777

>>621713
> ∗s++ = ∗t++
> лучше избегать таких конструкций
Это идиома, ее поведение абсолютно прозрачно, зачем ее избегать? Другое дело, что конкретно в примере >>621588 лучше сделать нечто вроде:
while (i < len && !isalpha(inq[ i ]))
++i;
или в крайнем случае пустой for а еще лучше функцию типа skip_non_alpha, тогда будет одновременно читаемо и красиво.

>>621690
> как в winsock узнать, есть ли данные, которые сокет принял и можно их оттуда забирать
Это целиком и полностью неверный подход: это очень медленно, и это неудобно, когда у тебя много сокетов. Правильнее попросить систему уведомить тебя, когда можно будет читать/писать. И вот тут появляются варианты. Если уже есть окно, и нужно передавать медленно и немного - WSAAsyncSelect хватает с головой. Если скорость важна - overlapped IO или IOCP. Если не осилишь такое, WSAEventSelect. Если нужно кроссплатформенность - select. Если не осилишь ничего из описанного вообще, тогда блокирующие сокеты. А про существование FIONREAD лучше вообще пока забыть.

>>621690
> почему select возвращает 1, а ioctlsocket ноль
select возвращает общее число выбранных дескрипторов (во всех наборах), а ioctlsocket - код ошибки.

Ответы: >>621852

08 Янв, 19:59 #249 #621813

А как вычислить сумму ряда на C?

Ответы: >>621814, >>621816

08 Янв, 20:00 #250 #621814

>>621813
Сложить.

08 Янв, 20:02 #251 #621816

>>621813
int sum = 0;
for (int i = 0; i < N; i++) {
sum += element;
}
И в чем у тебя проблема была?

Ответы: >>621817

08 Янв, 20:03 #252 #621817

>>621816
>element
фикс

Ответы: >>621818

08 Янв, 20:03 #253 #621818

>>621817
А... Курсив!

08 Янв, 21:14 #254 #621852

>>621777
>Это идиома
Просто привёл пример "крутого цикла в одну строку". Хотя мне всё равно не нравятся такие конструкции.

>Это целиком и полностью неверный подход
А если у меня на каждое подключение создаётся отдельный поток?
Не >>620375

>Если уже есть окно
У меня нет виндового окна.
Жду до таймаута с помощью select, потом читаю/закрываю, смотря что вернулось.
>Если нужно кроссплатформенность - select
Не сказать, что нужна. Но с помощью select и жду, когда данные придут.
>overlapped IO или IOCP
WSAIoctl, WSARecv, WASSend? Или что?
>А про существование FIONREAD лучше вообще пока забыть.
Что с ним не так?
>ioctlsocket - код ошибки
Не нашёл, как с помощью неё узнать код ошибки. Сделать неблокируемым, доступное кол-во байт и некое SIOCATMARK. Ошибка же через WSAGetLastError.

Грамотные примеры реализации можешь посоветовать, где посмотреть?

Ответы: >>621913

08 Янв, 22:17 #255 #621876

Есть ли практической применение рекурсивного вызова main()?

Ответы: >>621913

08 Янв, 23:09 #256 #621913

>>621852
> WSAIoctl, WSARecv, WASSend? Или что?
Все функции, где есть lpOverlapped.

>> FIONREAD
> Что с ним не так?
А зачем лишний сисколл, если можно сразу прочитать, когда одна из функций ожидания сказала, что данные есть (или получить WSAEWOULDBLOCK без ожидания, если состояние сокета по какой-то причине неизвестно)?

> Не нашёл, как с помощью неё узнать код ошибки.
Она сама возвращает SOCKET_ERROR, если ты ей неверные аргументы скормишь, и 0, если отработала нормально. А select возвращает SOCKET_ERROR (-1) или количество дескрипторов. Вопрос >>621690 вроде об этом был, разве нет?

> примеры реализации можешь посоветовать
http://www.amazon.com/Network-Programming-Microsoft-Windows-Edition/dp/0735615799 ответит на все твои вопросы. Не уверен насчет второго издания, но первое даже на русском есть.

>>621876
Хуй знает... ну можно командную строку перезадать или дополнить в каких-то случаях. Например, в зависимости от какого-то ключика читать командную строку из файла. Например: https://www.google.com/search?q=compiler+response+file

09 Янв, 00:45 #257 #621952

Не подскажите годной литературы по WinAPI?

Ответы: >>621957

7 Кб, 209x240

09 Янв, 00:56 #258 #621957

>>621952
Рихтер, потом MSDN. Можно просто MSDN, ее можно прямо по разделам читать.

Ответы: >>621960

09 Янв, 01:01 #259 #621960

>>621957
Премного благодарен.

09 Янв, 01:02 #260 #621961

Здесь стоит задавать вопросы касательно С в реалиях микроконтроллеров? А то в радаче треды полумертвые.

Ответы: >>621962

09 Янв, 01:03 #261 #621962

>>621961
Если связано с Си, почему бы и нет?

Ответы: >>621968

09 Янв, 01:18 #262 #621968

>>621962
Разбираю даташит и атмеловские библиотеки, замечаю запись такого вида:
var1 = (uint_8)(var2 >> 8);
или просто:
var1 = (unsigned char)var1;

Беглый просмотр по объявлению переменных объяснения не дал, что это за запись такая?

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

Ответы: >>621969, >>621970, >>621971, >>621978

09 Янв, 01:22 #263 #621969

>>621968
Приведение типов же.

09 Янв, 01:26 #264 #621970

>>621968
(имя_типа) переменная — это такое явное преобразование типов из одного в другой.
static кажется и в случае с inline ограничивает ее область видимость до файла, в котором она находится. То есть, это функция будет видна только в том файле, в котором она объявлена.

09 Янв, 01:27 #265 #621971

>>621968
> но почему очень часто функцию объявляют как static inline разобраться не могу

static здесь говорит, что функцию снаружи вызывать никто не будет. Поэтому в объектный файл она может вообще не скомпилироваться, если компилер ее везде заинлайнит. Если просто inline, то компилер попытается инлайнить функцию везде, где может, но все равно дополнительно в объектник положит копию функции, которую можно вызвать снаружи. А она может и нахуй не нужна.

Ответы: >>621972

09 Янв, 01:32 #266 #621972

>>621971
Вот для примера:
static inline a(int i) { return i + 1; }
int b(int i) { return a(a(a(i))); }

Если положить в 1.c и компилировать с помощью `gcc -Os -c 1.c`, то на выходе в объектнике нет символа `a` (можно посмотреть с помощью `readelf -s 1.o`). Если же static убрать, то символ есть, то есть функция `a` теперь тоже есть в объектнике и ее можно вызвать снаружи.

09 Янв, 01:37 #267 #621975

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

09 Янв, 02:09 #268 #621978

>>621968
Когда не знаешь, попробуй гуглить.
https://gcc.gnu.org/onlinedocs/gcc/Inline.html
>When a function is both inline and static, if all calls to the function are integrated into the caller, and the function's address is never used, then the function's own assembler code is never referenced. In this case, GCC does not actually output assembler code for the function, unless you specify the option -fkeep-inline-functions.

09 Янв, 02:43 #269 #621996

Как читать проекты на сишке? С чего начинат? Как определять "main" файл, который может носить произвольное название?
С какого конца раскручивать?
Мб лучше сначала хедеры читать, а потом *.c?

Просто я наткнулся на проект на ncurses, принцип работы которого хотел бы понять. А именно, как "прибит" интерфейс к самому приложению.

Ответы: >>621998

09 Янв, 02:45 #270 #621998

>>621996
Если unix-подобная ОСь, то найти main очень даже просто.

Ответы: >>621999

09 Янв, 02:50 #271 #621999

>>621998
Да, точно, я затупил что-то. Не имел дела с сишкой полтора года.

09 Янв, 02:58 #272 #622003

>Стандарт ISO/IEC 9899:2011 (он же C11)

теперь можно быстрые веб-сайтики клепать на сишке?

Ответы: >>622004, >>622009

09 Янв, 03:00 #273 #622004

>>622003
Ты думаешь, раньше кто-то запрещал? Но вообще, для сайтиков есть более подходящие инструменты.

Ответы: >>622007

09 Янв, 03:05 #274 #622007

>>622004
>Ты думаешь, раньше кто-то запрещал? Но вообще, для сайтиков есть более подходящие инструменты.
с++?

а реально, есть какие фреймворки или типа того? Занимается этим серьезно?

Ответы: >>622012, >>622068

09 Янв, 03:08 #275 #622009

>>622003
А в этом стандарте много нового ввели? Я думал там потоки только завезли. И кажется еще что-то с юникодом связанное.

Ответы: >>622012, >>622017

09 Янв, 03:13 #276 #622012

>>622007
Python/PHP/Java конечно На роутерах бэкенд иногда на сишечке, иногда на плюсах. За фреймворки не скажу, всё, что видел - велосипеды.

>>622009
Потоки, чуть лучший юникод, выравнивание в памяти, static_assert, анонимные структуры (как у MS было), _Generic, эксклюзивный доступ к файлам, ну и еще что-то по мелочи.

09 Янв, 03:22 #277 #622017

>>622009
Построчно и кратко.
https://ru.wikipedia.org/wiki/C11#.D0.98.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.81.D1.80.D0.B0.D0.B2.D0.BD.D0.B5.D0.BD.D0.B8.D1.8E_.D1.81_C99

09 Янв, 11:23 #278 #622068

>>622007
vibe.d

09 Янв, 13:01 #279 #622097

Товарищи, заметил непонятную ересь у себя. Сам я новичок, пишу на сях меньше пары месяцев. Есть код вида
eoucheck = fgetc(DB_table);
while (!feof(DB_table)) {
\twhile (eoucheck != '\n') {
\t\twhile (eoucheck != '|') {

который не работает. Он и не должен работать, или это я такой аутист?

Ответы: >>622098, >>622109

09 Янв, 13:02 #280 #622098

>>622097
табы прикрепились, это не я.

Ответы: >>622101

09 Янв, 13:12 #281 #622101

>>622098
У тебя eoucheck вне цикла.

Ответы: >>622103

09 Янв, 13:13 #282 #622103

>>622101
То есть fgetc(). Оно один символ возьмет из потока перед циклом и все.

Ответы: >>622105

09 Янв, 13:14 #283 #622105

>>622103
Т.е. это должно выглядеть, как while((eoucheck = fgetc(DB_table)) != EOF) <блаблаблаблабоди> или о чем ты?

Ответы: >>622107, >>622109

09 Янв, 13:15 #284 #622107

>>622105
Да.

09 Янв, 13:17 #285 #622109

>>622097
Дабы внести ясности (хотя, скорее всего, вам и так это ясно), не работает именно переход от строчки на другую строчку по завершению оной.
При том варианте в посте, и >>622105 одинаково не работает именно это.

Ответы: >>622112

09 Янв, 13:21 #286 #622112

>>622109
У тебя какая-то очень странная конструкция. Зачем здесь циклы для '\n' и '|'? Что ты хочешь сделать вообще?

Ответы: >>622114

09 Янв, 13:24 #287 #622114

>>622112
Согласен, поэтому и спрашиваю. Окей, рассказываю поподробнее. Есть файлик DB_table с содержимым вида:
S | himpanze
G |orilla
M | akaka
Необходимо пройтись по строчкам и в переменную w1 вписать до |, а в w2 соответственно после. В общем, с этим все ясно. Я пришел к выводу, что можно пройтись по строчкам и до | с помощью fgetc() записать необходимые символы в переменную, и после | соответственно тоже. Код получился таким, каким я указал выше.

Ответы: >>622120, >>622123

09 Янв, 13:27 #288 #622120

>>622114
И, забыл указать, важная беда - это rb, а не rt.

Ответы: >>622121

09 Янв, 13:28 #289 #622121

>>622120
Т.е. в таком случае я должен использовать fread, верно?

09 Янв, 13:29 #290 #622123

>>622114
Тебе кажется нужен strtok. С помощью него удобней парсить строки. Считай все из файла и парси.

Ответы: >>622125

09 Янв, 13:31 #291 #622125

>>622123
Да, я думал о таком. Но как указать максимальный размер строки? Писать условный 1024? А если выйдет так, что строчка равно 1025? Или плевать на них, и сказать, мол, у меня запрещено так делать?

Ответы: >>622127

09 Янв, 13:33 #292 #622127

>>622125
Создавай динамический массив и изменяй его размеры, когда считанных символов становится больше чем твой буфер.
man malloc
man realloc

Ответы: >>622128

09 Янв, 13:33 #293 #622128

>>622127
Да, это очевидный вариант, хоть и затратный по памяти. Хорошо, я попробую, спасибо.

Ответы: >>622138

252 Кб, 535x700

09 Янв, 13:36 #294 #622131

>>609376 (OP)
Здраствуй анон, помоги нублу.
Учу основы кодинга по пику, однако встал вопрос, который даже стыдно задавать, не могу понять как работает простейшая программка.
Есть одна функция, которая выводит на экран строку в обратном порядке.

void print_reverse(char s)
{
size_t len = strlen(s);
char t = s + len -1;
while(t >= s)
{
printf("%c", t);
t = t - 1;
}
puts("");
}
*
Помоги, задать вопрос больше некому.

Ответы: >>622138, >>622141, >>622789

09 Янв, 13:44 #295 #622138

>>622128
Ну затратный он или нет, зависит от того, как ты будешь увеличивать. Куда затратней, статику большую использовать. Но в твоем случае, это вообще не существенно, так как у тебя больше нескольких кБ вероятно не будет.

>>622131
https://ideone.com/C8gQOy
Сюда код, в котором есть указатели не выкладывай. Здесь звезды съедает.

Ответы: >>622143

09 Янв, 13:47 #296 #622141

>>622131

#include <stdio.h>
#include <stdlib.h>
void print_reverse(char s)
{
size_t len = strlen(s);
char t = s + len -1;
while(t >= s)
{
printf("%c", *t);
t = t - 1;
}
puts("");
}

int main()
{
char x[40];
puts("Введи строку \n");
fgets(x, 39, stdin);
print_reverse(x);
return 0;
}

Вот весь код, который работает. Однако понимания не прибавило лол

Ответы: >>622152

09 Янв, 13:48 #297 #622143

>>622138
https://ideone.com/dCMYlv

09 Янв, 13:54 #298 #622152

>>622141
Я не внимательно прочитал сначала.
https://ideone.com/98CYJE
Расставил комментарии.

Ответы: >>622159

09 Янв, 14:03 #299 #622159

>>622152
Спасибо, анон. Кажется начинаю вникать. И еще вопрос: где найти задачи на большее усвоение тем указателей и строк?

Ответы: >>622161

09 Янв, 14:04 #300 #622161

>>622159
Книжки почитай. K&R или Прата. У них и задачи есть.

Ответы: >>622163

09 Янв, 14:08 #301 #622163

>>622161
Вдогонку, почему мои программы неадекватно работают с кириллицей? Либо толпы вопросов, либо ошибка.

Ответы: >>622165

09 Янв, 14:11 #302 #622165

>>622163
Поднимался вопрос в треде.
Читай отсюда:
>>621138

20 Кб, 689x270

09 Янв, 14:14 #303 #622169

ПОСОНЫ НА СКРИНЕ БЛЯТЬ ПРОБЛЕМА ВЕКА,
ЧО ДЕЛАТЬ НАХУЙ ПИЗДЕЦ СРОЧНО

после while( chunksize > 0 ) присваевается ноль

я перегрелся?
и не нашел где плюсотред.

Ответы: >>622171, >>622195

09 Янв, 14:15 #304 #622171

>>622169
У тебя БЛОКСАЙЗ не равен нулю случаем?

Ответы: >>622173

09 Янв, 14:17 #305 #622173

>>622171
нет, const int BLOCKSIZE = 1024;
на скрине, шаг1 высвечивает нормальное значение

Ответы: >>622180

09 Янв, 14:21 #306 #622180

>>622173
а оффсет 1024м?

Ответы: >>622187

44 Кб, 558x411

09 Янв, 14:24 #307 #622185

Я ТАК НЕ ИГРАЮ НАХУЙ
чо делать то?

Ответы: >>622191

09 Янв, 14:27 #308 #622187

>>622180
офсет нулю равен, это не важно
второй скрин смотри

09 Янв, 14:36 #309 #622191

>>622185
не, тут все верно вылетает

09 Янв, 14:47 #310 #622195

все решил, это я перегрелся.

на этом скрине >>622169 видно что chanksize внутри while не подсвечивается.
компилятор его считал другой переменной.

объявлена была в самом конце цикла, то есть после использования.

09 Янв, 15:33 #311 #622219

Хм. Это нормально, что для массива структур, состоящей из ~70 указателей на char + несколько массивов char хватает только 75 плюс-минус 1 элемент? Дальше программно тоже нельзя для такой структуры выделять память... Система Debian, сборка с помощью CMake, если что.

Ответы: >>622223, >>623118

09 Янв, 15:35 #312 #622223

>>622219
Покажи код структуры. Я лично, не понял что ты имеешь ввиду.

Ответы: >>622228

09 Янв, 15:39 #313 #622228

>>622223
http://pastebin.com/dEmybkBY

Ну вот. Потом идёт
Record Table[RNUM];
Где RNUM - количество читаемых строк из некоего файла, это число нельзя поставить больше 75. Может, нужно выделять память через malloc?

09 Янв, 17:45 #314 #622303

Как преобразовать id потока в int? На строчку:"int a = (uint64_t) phil4.get_id;" жалуется компилятор

Ответы: >>622335, >>622367, >>622392

09 Янв, 18:25 #315 #622335

>>622303
Не уверен, что тебе нужно, но попробуй int a = @(uint64_t@)&phil4.get_id; где @ - *

Ответы: >>622367

09 Янв, 19:11 #316 #622367

>>622303
uint64_t на int замени.
>>622335
Тогда уж int a = ∗(int∗)(uint64_t∗)&phil4.get_id;

Ответы: >>622392

09 Янв, 19:48 #317 #622392

>>622303
Мне показалось, или ты ошибся тредом? У нас тут няшная сишечка, а не плюсы. Алсо, get_id - метод, почему ты его не вызываешь?

>>622367
Никогда больше так не делай. К тому же, подобный двойной каст указателя - абсолютно бессмысленная вещь.

09 Янв, 20:54 #318 #622452

Почему IDE Pelles C часто выдает ошибку "Отказано в доступе", которая лечится только перезапуском IDE? Заебывает.

Ответы: >>622471

09 Янв, 21:08 #319 #622471

>>622452
google://ide pelles c access violation

Ответы: >>622650, >>622652

10 Янв, 01:30 #320 #622650

>>622471
В гугле пиздят, #pragma optimize(none) не помогает от этой ошибки.

10 Янв, 01:32 #321 #622652

>>622471
Вообще там обо всем пиздят. Отключение оптимизации в настройках не помогает.
http://forum.pellesc.de/index.php?topic=2862.15

Ответы: >>622665

10 Янв, 02:30 #322 #622665

>>622652
Давай больше технической инфы. Адрес ошибки, код исключения, имя модуля, какая винда?

22 Кб, 517x330

10 Янв, 08:32 #323 #622789

Я снова тут. Теперь туплю при написании программы по задаче. АВТОБУС ОШИБКА
ЧЯДНТ?
https://ideone.com/ICuvSY
>>622131

Ответы: >>622791, >>622793

10 Янв, 08:38 #324 #622791

>>622789
Если дебаггер не завезли, хотя бы с помощью printf("1");fflush(stdout); ошибку локализуй.

10 Янв, 08:39 #325 #622793

>>622789
https://ideone.com/xixkIN
У тебя ошибка на ошибки, ошибка через ошибку...

Ответы: >>622794, >>622795

54 Кб, 354x367

10 Янв, 08:41 #326 #622794

>>622793
Да что же это такое... Буду перепиливать. Спасибо

10 Янв, 08:43 #327 #622795

>>622793
>Бред. Ты сравниваешь адрес с числом
Арифметические операции с указателями разве не так реализуются?

Ответы: >>622796

10 Янв, 08:56 #328 #622796

>>622795
Адрес имеет значение вида 0x0c4233dd. Число, которое сравнивается с указателем в том цикле является длинной строки. Сам подумай, есть ли в этом смысл.

Ответы: >>622797

10 Янв, 08:59 #329 #622797

>>622796
Уточнение:
Было бы правильно, если бы сравнивался указатель на начало строки с указателем на начало строки + длинна строки. Тогда было бы нормально.

Ответы: >>622799

10 Янв, 09:02 #330 #622799

>>622797
Но как тогда "передвинуть" указатель первого символа строки на Nый символ оной? Видимо я недопонял саму концепцию операций над указателями, лол

Ответы: >>622802

10 Янв, 09:10 #331 #622802

>>622799
Ты передал первый элемент массива через аргумент. Создай в той же функции указатель, который будет указывать на то, что ты передал (начало строки), Это для того, чтобы не потерять саму строку. Затем, ты можешь делать со строкой все что угодно. Для того чтобы передвинуть указатель, тебе нужно добавить целое число. Допустим есть у тебя указатель на char. Прибавляя единицу, ты сдвинешься на один байт. Если указатель будет на double, добавив единицу, ты сдвинешься на 8 байт, так как double = 8 байтам. Естественно, размеры char, int , double - не фиксированы и зависят от платформы. Но я взял к примеру amd64.

Ответы: >>622803, >>622861

10 Янв, 09:12 #332 #622803

>>622802
Спасибо за объяснения Вчера ли не ты мне помог?, приму к сведению, пойду перечитывать главу с указателями.

Ответы: >>622804

10 Янв, 09:15 #333 #622804

>>622803
Да. Перечитай и попрактикуйся. Указатели лишь поначалу кажутся сложными и непонятными, но если приловчится, начинаешь без проблем работать даже с самыми сложными конструкциями.
Ага. Если ты про книги, юникод и комментарии.

10 Янв, 12:28 #334 #622861

>>622802
>char, int , double - не фиксированы и зависят от платформы
nope, char везде 1 байт

Ответы: >>622865, >>622891

10 Янв, 12:33 #335 #622865

>>622861
будь чар 1 байт, то тогда не придумывали бы uint8_t

Ответы: >>622876, >>622891

10 Янв, 13:06 #336 #622876

>>622865
http://stackoverflow.com/questions/437470/type-to-use-to-represent-a-byte-in-ansi-c89-90-c/437640#437640

Ответы: >>622891

10 Янв, 13:27 #337 #622891

>>622876
>>622865
>>622861
Да какая разница. Будто кто-нибудь здесь пишет под очень редкие и необычные платформы.

10 Янв, 19:22 #338 #623079

как понять формальные и фактические параметры?

Ответы: >>623081

10 Янв, 19:25 #339 #623081

>>623079
Формальные — это тот, который ты задаешь при определении функции. Фактический — тот который используется при вызове.

Ответы: >>623088

10 Янв, 19:32 #340 #623088

>>623081
типа int huy (int govno) - huy это формальный, govno - фактически - правильно поняЛ?

Ответы: >>623090

10 Янв, 19:37 #341 #623090

>>623088
Нет. Возьмем этот https://ideone.com/xixkIN пример (не обращай внимание, что код в не абсолютно не правильный).
Здесь на строке 17 и 33 у нас определения функций. Аргументы, которые они принимают — формальные. То есть на не обязательно, передавать аргументы с теми именами, которые указаны. Главное чтобы тип совпадал.
А вот вызовы этих функций, на строке 39 и 49 — принимают фактические аргументы.

Ответы: >>623095, >>623097

10 Янв, 19:43 #342 #623095

>>623090
А, ясно короче, блин. Лол. а так описано ФОРМАЛЬНЫЕ ФАКТИЧЕСКИЕ, лол, я думал там сложно А это оказывается принимаемые параметры и объявляемые в фцункции, спасибо.

Короче
где-то в программе int huy_pizda;

int huy (int govno)//формальный
{..}

huy(huy_pizda) - фактически

Ответы: >>623099

10 Янв, 19:46 #343 #623097

>>623090
Забыл сказать - спасибо.

10 Янв, 19:47 #344 #623099

>>623095
Небольшое уточнение.Это параметры объявляемой и вызываемой функции.
>int huy (int govno)//формальный {..}
Здесь именно int govno - формальный параметр
>huy(huy_pizda) - фактически
huy_pizda - фактический параметр.

10 Янв, 20:13 #345 #623118

>>622219
Опять я выхожу на связь. Портирую свою программу на виндовс. Через тот же Qt и CMake. И тут вылезает такая segmentation fault в следующем участке:

char buf=((char)malloc(sizeof(char)10BUF_SIZE)); <- если использовать такую конструкцию, то для буфера хватит аж целых 10 кБ, и никакой ошибки не возникает

char buf; <- если использовать такое объявление и прикрутить проверку на выделение памяти, вылезает segmentation fault и пишет Out of memory: not enough space (причём здесь выделяется всего лишь 1кБ.
if ((buf=((char)malloc(sizeof(char)*BUF_SIZE)))==NULL){ \t \t
perror("Out of memory");
system("pause");
exit (-1);
}

Ответы: >>623124

10 Янв, 20:15 #346 #623124

>>623118
Ну блин. Всё время забываю про звёзды.
http://pastebin.com/LYnKn6HK

Ответы: >>623132

10 Янв, 20:24 #347 #623132

>>623124
BUF_SIZE покажи как определен.

Ответы: >>623135, >>623137

10 Янв, 20:26 #348 #623135

>>623132
через #define

Но вот щас интересная магия происходит: убираю отладочный printf - программа крашится...

Ответы: >>623172

10 Янв, 20:27 #349 #623137

>>623132
0x7fffffff

Ответы: >>623144

10 Янв, 20:33 #350 #623144

>>623137
А тебе двух гигов не многовато будет?

Ответы: >>623155

10 Янв, 20:43 #351 #623155

>>623144
А я по твоему должен думать о нищебродах, у которых меньше 8Гб ОЗУ?
Да я не он. Просто вспомнил многопоточный сканер портов, который был сотней постами ранее.

Ответы: >>623166

10 Янв, 20:46 #352 #623158

Что скажите о GTK? Он где то применяется кроме open source проектов?

10 Янв, 20:53 #353 #623166

>>623155
Видел коммерческий русский софт на PyGTK.

10 Янв, 21:01 #354 #623172

>>623135
Ты всю функцию покажи.

Ответы: >>623177

10 Янв, 21:05 #355 #623177

>>623172
http://pastebin.com/VWib8xT7

Ответы: >>623184

10 Янв, 21:13 #356 #623184

>>623177
> memset(buf,0,sizeof(buf));
http://www.viva64.com/ru/b/0360/

Покажи дефайн с BUF_SIZE. Или проблема в нём, или ты кучу распидорашиваешь где-то в другой части программы.

Ответы: >>623188

10 Янв, 21:17 #357 #623188

>>623184
Хм. Возможно, стоит отказаться от использования этой функции.
Дефайн вот:
#define BUF_SIZE 500
Если поставить, к примеру, 1000, то программа не выдерживает.
Пробовал объявить и глобальную
size_t BUF_SIZE=1000;
Проблема та же.

Ответы: >>623195, >>623197

10 Янв, 21:21 #358 #623195

>>623188
А у тебя точно считывается не больше BUF_SIZE - 1 байт?

Ответы: >>623200

10 Янв, 21:21 #359 #623197

>>623188
Не надо отказываться, надо после malloc кормить в memset то, что кормил в malloc, а не sizeof указателя. А вообще, у нас calloc есть.

Ответы: >>623204, >>623205

10 Янв, 21:24 #360 #623200

>>623195
Точно. Самая большая строка - первая, в ней 460 символов всего.

Ответы: >>623205

10 Янв, 21:27 #361 #623204

>>623197
Ок, тогда буду юзать calloc.

Ответы: >>623211

10 Янв, 21:30 #362 #623205

>>623197
Не нужен ему memset, он всё равно буфер заполняет из файла.
>>623200
Не поленился и проверил твою функцию. Как и ожидалось, всё нормально выполняется. Ошибка не в ней.

Ответы: >>623207, >>623211

10 Янв, 21:32 #363 #623207

>>623205
Спасибо. А через что проверял? Я и через Qt и через Dev-C++ запускал.

Ответы: >>623212

10 Янв, 21:34 #364 #623211

>>623205
Я проверял первое, что он выложил. Тоже работает.

>>623204
Разницы не будет.
И вообще. В чем проблема взять отладчик? Отладка при помощи принтов не самый оптимальный способ.

97 Кб, 1280x800

10 Янв, 21:36 #365 #623212

>>623207
Через конпелятор VS2005.

Ответы: >>623214, >>623215, >>623216

10 Янв, 21:38 #366 #623214

>>623212
Ты там браузер пишешь?

Ответы: >>623216

10 Янв, 21:39 #367 #623215

>>623212
А, тогда норм.
QtCreator ещё почему-то не завершает программу, которая запустилась нормально и завершилась нормально, и если не убить её вручную, то следующий запуск будет с фейлом.

10 Янв, 21:39 #368 #623216

>>623212
А вкладки замазать забыл, ананимас блин.
>>623214
Нет, кэширующий https-прокси. Это как mitm-прокси, только кэширующий.

Ответы: >>623217

10 Янв, 21:41 #369 #623217

>>623216
https://msdn.microsoft.com/en-us/library/974tc9t1.aspx посмотри там в конце, как включить отладку кучи (не помню, можно ли где-то галочкой поставить).

10 Янв, 21:47 #370 #623223

Как в Си сделать ассемблерную вставку?

Ответы: >>623226, >>625239

10 Янв, 21:48 #371 #623226

>>623223
asm{

}

10 Янв, 23:02 #372 #623266

>>623264
>>623265

помогите совладать нубу с лабой плз :(

Ответы: >>623299

11 Янв, 00:18 #373 #623299

>>623266
Не совсем понятно, зачем там add esi,24 и прочие shr до dec. В остальном все ок же. Я бы сделал fldz и цикл из нужного количества fadd. Как-нибудь так: http://pastebin.com/LUPasL1Z

18 Кб, 876x69

11 Янв, 00:40 #374 #623309

Я не могу понять чистый си, вот почему он отказывается выводить матрицу и выдает

for (int i=0; i<5; i++) {

for (int j=0; j<5; j++) {
printf("%d\t", kk[j] );
printf("\n");
}
}

Какой у меня дабл, наркоманы

Ответы: >>623310, >>623311, >>623313

11 Янв, 00:43 #375 #623310

>>623309
блядь половину знаков сьела вакаба
printf("%d\t", kk[j]);
конечно же

11 Янв, 00:44 #376 #623311

>>623309
>printf("%d\t", kk[j] );
>printf("%lf\t", kk[j] );
Для float - %а, для double - %lf.

Ответы: >>623312

11 Янв, 00:44 #377 #623312

>>623311
>Для float - %а
>Для float - %f
фикс

11 Янв, 00:49 #378 #623313

>>623309
Покажи как kk[][] объявлял.

11 Янв, 16:45 #379 #623359

программач, вот я, допустим, угорел по С и подучив немного теорию захотел реализовать свои новоприобритенные навыки - стоит лезть на гитхаб в относительно простые проекты со своими предложениями? свои велосипеды писать не хочется тк быстро надоедает написание программ бесцельно, а тут какая-никакая польза вред для сообщества. Или есть места более для этого подходящие? Или вообще стоит порешать задачи университетские (методички и прочее)?

Ответы: >>623366

11 Янв, 17:00 #380 #623366

>>623359
Стоит лезть с пулл-реквестами, но постарайся делать это не так:
https://lkml.org/lkml/2015/11/19/466

Ответы: >>623372

11 Янв, 17:07 #381 #623372

>>623366
А есть другие площадки, где, например, низкий порог вхождения?

Ответы: >>623433

11 Янв, 17:43 #382 #623386

В чём подводные камни использования fclose ?

Ответы: >>623428, >>625237

11 Янв, 18:48 #383 #623428

>>623386
Чего-о-о? Нет никаких камней, обязательно используй.

11 Янв, 18:50 #384 #623433

>>623372
Гитхаб норм же. Можешь какого-нибудь инди-разработчика найти с проектом, который тебе интересен - и он будет рад внезапным помощникам, и тебе опыт.

problem 12 Янв, 23:12 #385 #624489

Программисты, у меня проблема.

Кто нибудь кодит в XCode ?

Начал свой небольшой проект на чистом С. И столкнулся с такой хуйней.
Есть 3 файла.

//main.c
#include "cpu.h"
//код программы

//cpu.c
#include "cpu.h"
//тут реализация пары функций из cpu.h

//cpu.h
#ifndef cpu_h
#define cpu_h
// тут объявлены 11 глобальных переменных, используемых
// и в main.c и в cpu.c
#endif / cpu_h /

Так вот я не могу скомпилировать это дерьмо. Потому что на линковке выдает ошибку - 11 duplicate symbols for arhitecture bla bla.

Что за хуйня? такой же код и файлы в Visual Studio компилируются нормально.

Ответы: >>624705

13 Янв, 11:12 #386 #624705

>>624489
если глобальные переменные extern, их значения надо присваивать в cpu.c, а не cpu.h

extern yoba_t YOBA; // cpu.h
yoba_t YOBA = {Kruzhok, Zhelty}; // cpu.c

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

еще можно в cpu.h просто пометить переменные как static, тогда на самом деле main.c и cpu.c будут использовать разные копии.

14 Янв, 05:34 #387 #625237

>>623386
Например вот: только после fclose в успешную, ты имеешь гарантию что данные записались на диск - иначе нет.

Ответы: >>625241

14 Янв, 05:38 #388 #625239

>>623223
В с нет такого понятия как ассемблерные вставки. Такое понятие есть на уровне компиляторов - у каждого свои.

14 Янв, 05:46 #389 #625241

>>625237
Во-первых, это всего лишь потому, что fclose делает fflush, а во-вторых, ОС может с тобой не согласиться, а накопитель тем более может не согласиться.

Ответы: >>625242

14 Янв, 05:57 #390 #625242

>>625241
> например, узнать что такое стан
> ОС может
А вот и олени подкатили. Ты действительно еблан?

14 Янв, 05:58 #391 #625243

Ну какой может, да лишь потому. Есть описание - по нему и нужно думать. А как там внутри - сёдня так, завтра сяк - и только линус будет возникать в защиту говнокодеров.

14 Янв, 06:03 #392 #625244

Есть вменяемые библиотеки для работы с текстом?

Ответы: >>625245

14 Янв, 06:07 #393 #625245

>>625244
> для работы с текстом
Давно хочу знаит, а что это значит? Нужно соединять строчки красиво?

Ответы: >>625247

14 Янв, 06:09 #394 #625246

Или там парсить с регулярными выражениями?

14 Янв, 06:10 #395 #625247

>>625245
Ну всякие part of speech tagger (проставлялка частей речи, допустим в английском), какие-нибудь библиотеки для автоматизации рутинной ебли с указателями на массив символов.
Регекспы устраивают, но не совсем. Да и медленновато ими.

Ответы: >>625248

14 Янв, 06:12 #396 #625248

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

14 Янв, 06:16 #397 #625249

Можно попробовать погуглить "C библиотека распознавания частей предложений" Забавно, если добавить в запрос "C" то часто по теме ищет... Хотя 1 символ то. - но наверно ты это сделал уже, и спросил за опыт пользования.

Ответы: >>625255

14 Янв, 06:42 #398 #625255

>>625249
Ну да. Хочется чего-то такого.
https://stackoverflow.com/questions/21871374/is-there-any-part-of-speech-tagger-in-c

Ответы: >>625256

14 Янв, 06:43 #399 #625256

>>625255
https://stackoverflow.com/questions/1805099/c-c-nlp-library
Даже что-то нагуглил, есть тут кто с опытом использования?

14 Янв, 16:12 #400 #625475

Посоветуйте годной литературы по работе с потоками.

Ответы: >>625885

15 Янв, 01:44 #401 #625885

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

Ответы: >>629511

15 Янв, 02:40 #402 #625910

>>613506
>size_t на unsigned int
Лол, вы тут все такие ебанутые?

15 Янв, 02:44 #403 #625912

>>613522
>так и больше размера size_t
Карнавал продолжается. Хотя с числовыми эквивалентами указателей дикий наёб (вспомнить хоть ptrdiff_t к тому), тут только строго c99 (со своими модными intptr_t и uintptr_t) иначе не как .

15 Янв, 03:01 #404 #625918

>>619834
В чём проблема то? Бери да кастуй, не нравится - определяй юнион, если там есть массивы переменной длины - объявляй структуру прям внутри функции, где укажешь какой размер массивов в данный момент. А вообще, я не понял что хочешь ты.

15 Янв, 03:05 #405 #625921

>>620081
>Стандарт запрещает
Стандарт определяет тебе за щеку. Какая хуйня разница на порядок байт, если это не внешние данные, например Или с чего ты взял что это не так?

15 Янв, 03:08 #406 #625923

Ой всё, не могу больше читать вас.

Ответы: >>625931

15 Янв, 04:52 #407 #625931

>>625923
да, пиздуй отсюда, хуесос

15 Янв, 14:42 #408 #626146

>>620297
Мелкомягие тоже могут, оказывается ))
C:\TEMP\1>cl /GS- 2.c /link /NODEFAULTLIB /ENTRY:mainCRTStartup /SUBSYSTEM:CONSOLE /IGNORE:4254 kernel32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

2.c
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.

/out:2.exe
/NODEFAULTLIB
/ENTRY:mainCRTStartup
/SUBSYSTEM:CONSOLE
/IGNORE:4254
kernel32.lib
2.obj

C:\TEMP\1>2
Hello, World!

C:\TEMP\1>dir 2.exe|findstr 2.exe
15.01.2016 14:40 1 024 2.exe

C:\TEMP\1>type 2.c
#include <windows.h>
#pragma comment(linker, "/MERGE:.rdata=.data")
#pragma comment(linker, "/MERGE:.text=.data")
#pragma optimize("gsy", on)

int mainCRTStartup()
{
DWORD dwCharsWritten = 0;
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
char sMsg[] = "Hello, World!\n";
WriteConsole(hStdout, sMsg, lstrlen(sMsg), &dwCharsWritten, NULL);
return 0;
}

15 Янв, 18:15 #409 #626263

Есть два массива c[j ... q-1] и a[k ... p + q - 1]. Как скопировать c в a проще всего? Есть какая-нибудь функция?
Индексы могут быть любыми, т.е. мы отрезок одного массива копируем в отрезок другого массива.

Ответы: >>626278

15 Янв, 18:39 #410 #626278

>>626263
Очевидные memcpy/memmove.

Ответы: >>626286

15 Янв, 18:44 #411 #626286

>>626278
Я уже погуглил memcpy. Как его правильно использовать, если массив C создан на куче? Есть указатель на его начало. Как с его помощью копировать диапазон элементов из данного массива в другой?

Ответы: >>626314

15 Янв, 19:24 #412 #626314

>>626286
Считаешь, сколько тебе элементов нужно скопировать. Копируешь:
memcpy(&dest_array[dest_index], &source_array[source_index], sizeof(source_array[0]) ∗ num_elemets);
Где созданы массивы, значения не имеет. Разве что, если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove.
Выражение &array[index] можно заменить на array + index, это вопрос личных предпочтений. Я считаю, что с & и индексом нагляднее.

Ответы: >>626407, >>626554

112 Кб, 848x833

73 Кб, 821x868

15 Янв, 23:14 #413 #626407

>>626314
Я вот что пишу. Видимо, я неправильно использую memset, потому что даже спижженное откуда-то копирование при помощи двух циклов дает мне некоторое подобие отсортированного списка. У меня же получается просто мусор.

Как можно исправить алгоритм?

https://ideone.com/b5Slww

У меня все компилируется и запускается. Про free я забыл, но сейчас допишу.

Ответы: >>626408, >>626410, >>626412, >>626449

15 Янв, 23:16 #414 #626408

>>626407
Блджад, а при добавлении free вне if'а или внутри программа падает при запуске.

15 Янв, 23:22 #415 #626410

>>626407
Еще одну ошибку увидел: при выделении памяти не домножаю на размер типа данных.

15 Янв, 23:23 #416 #626412

>>626407
Лел, исправил эту ошибку, и сразу заработало. Тогда просто подскажите, как из этого говна сделать хороший код. Что я делаю не так?

16 Янв, 00:56 #417 #626449

>>626407
Вот моя окончательная реализация, господа. https://ideone.com/quzyJ8
В процедуре mergesort выделяется память для двух массивов даже когда не выполняется условие n > 1, то есть будет утечка памяти. Как это исправить? Можно освобождать память внутри mergesort, но ведь логичнее это делать после слияния, когда массивы стали больше не нужны.

Ответы: >>626473

16 Янв, 01:46 #418 #626473

>>626449
Например free перенести из merge в mergesort?

16 Янв, 08:09 #419 #626554

>>626314
>Разве что, если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove
Против линуса попереть решил? Не стыдно?

Ответы: >>626585

16 Янв, 10:37 #420 #626585

>>626554
Почему? Он как раз всё по Линусу предлагает:
[CODE]
The memcpy() function copies n bytes from memory area src to memory
area dest. The memory areas must not overlap. Use memmove(3) if the
memory areas do overlap.[/CODE]

Ответы: >>626793

16 Янв, 15:46 #421 #626793

>>626585
нуфаг не вкурсе за memcpy срач

Ответы: >>627019

16 Янв, 18:22 #422 #626937

Анон поможи.
[code]
printing_str = int_data % 10 + '0';
[/code]
Каким образом это работает? Остаток от деления int на int будет int и к нему прибавляют char '0'. Ничего не понятно. Тут какое-то хитрое преобразования типов?

Ответы: >>626963, >>627170

16 Янв, 19:22 #423 #626963

>>626937
char - беззнаковый целочисленный 1-байтный тип данных. То есть [0; 255]. В стандартной кодировке числа идут по порядку, поэтому можно из '0' сделать '1', прибавив единицу. Или из 'a' сделать 'b'.

Ответы: >>627172

16 Янв, 20:40 #424 #627019

>>626793
Ну так просвети, ёбана. Я могу также сказать, что ты не читал мануал к функции memcpy().

Ответы: >>627171, >>627174

17 Янв, 00:09 #425 #627170

>>626937
Про типы данных в выражениях тебе нужно знать одно: если они меньше чем int они неявно кастуються в int, если больше, например безнаковый int, то кастуются в большое, понятно, по приоритетам операций. Всё, например, просто.

17 Янв, 00:10 #426 #627171

>>627019
Да я чист лах, забей)

Ответы: >>627278

17 Янв, 00:12 #427 #627172

>>626963
>char - беззнаковый целочисленный 1-байтный тип данных. То есть [0; 255].
Блять, вы же тралите так? Как вас земля носит. Знаковость он определил, ещё и диапазон вместимости чара, ну ахуеть.

17 Янв, 00:13 #428 #627174

>>627019
Он про https://sourceware.org/bugzilla/show_bug.cgi?id=12518

Ответы: >>627278

17 Янв, 00:24 #429 #627178

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

class os_vzai
....
DWORD, WORD я писал на винапи... какой шквар
....
Методы заебись:
void fu_cp_001(u_char bb) { //Просто пишим символ
bool fu_cp_002(WORD beck,WORD fore) { //Устанавлеваем цвет от 0-15
void fu_cp_002(WORD beck) { //Устанавлеваем цвет от 0-15
void fu_cp_003(u_sint xz,u_sint yz) { //Размер консоли
....

Потом я видимо на структуру и функции переписал:
struct OSVZAIM
....

OSVZAIM O1488=OSVZAIM(); - Что это в спп значит, помнит кто?
#define CRE_ALL_CON_SHIT(); \
({ \
O1488.CON_HAN_VIVO=GetStdHandle(STD_OUTPUT_HANDLE); \
O1488.CON_HAN_VVOD=GetStdHandle(STD_INPUT_HANDLE); \
....

Короче это обёртка для вывода на виндавс консоль....

17 Янв, 00:29 #430 #627183

Хотел откопать как я делал вычисления на макросах, а нашёл такой хуйни...

/
> Функция умножения ДЦПТ на ДЦПТ.
> Во всех операндах(1) части по 32бит. 2 - не больше 31
иначе я неебу чё произойдёт. ОСТОРОЖНО БЛЯТЬ например
неучтино что навыход число вдва раза больше.
> [1-Слагаемое] [2-Сдвиг на] [3-Байт колличесто]
/// 8 12 16 20
void bnFU_UDVx32_Mul(void Var_1, u_int Var_2, void Out_3, u_int Byt_4) { //ЭТО ПОЛНАЯ ХУЙНЯ, ПЕРЕПИСАТЬ
asm volatile (
STRING_LITERAL(
/ ~~ПУПОВИНА~~ /
movl 8(%esp) , %edi ;
movl 12(%esp) , %esi ;
movl 16(%esp) , %ecx ;

addl 20(%esp) , %esi ; //Смещь. умножитель на младьшее
movl 20(%esp) , %ebp ;
xorl %edx , %edx ;
/ ~~ТЕЛО~~ */
LAB_0301:
subl $4 , %ebp ;

movl 20(%esp) , %ebx ; //

addl %ebx , %edi ; //Смещь. умножаемое на младьшее

subl $4 , %ecx ; //Смещь. результ на доб смещь
subl $4 , %esi ; //Смещь. умножитель

LAB_0302: //ЗДЕСЬ умножаем 1 часть умножителя на умножаемое

17 Янв, 00:30 #431 #627184

Всё засрал, теперь можно и уходить, не благодарите.

17 Янв, 04:00 #432 #627278

>>627174
Энивей, не понятно, почему против Линуса, если он по ссылке пиздит про то что надо memmove() юзать.
>>627171
Хотя это многое объясняет.

Ответы: >>627280

17 Янв, 04:18 #433 #627280

>>627278
> если он по ссылке пиздит про то что надо memmove
> Хотя это многое объясняет
жопой читал, но ему много объясняет - так и запишем.

Ответы: >>627423

17 Янв, 12:54 #434 #627423

>>627280
просто иди нахуй

>memcpy acts randomly (and differently) with overlapping areas
>It's a common bug to use memcpy() instead of memmove()
>So from a pure Quality-of-Implementation standpoint, just make glibc implement memcpy() as memmove()
>However, I still don't understand why you guys can't just admit that you might as well just do memmove() and be done with it.

Ответы: >>627508

17 Янв, 13:16 #435 #627432

Я тут хотел задать вопрос по поводу буфера. Правильно ли я делаю:
1) Задаю начальный размер буфера;
2) Выделяю память при помощи malloc;
3) Делаю цикл для считывания введенных символов с клавиатуры до тех пор, пока символом не станет '\n';
4) В цикле есть счетчик, с помощью которого узнаю, не превышаю ли размера буфера;
5) В случае, если запись текущего символа превысит размер буфера будет превышен, удваиваю размер буфера при помощи realloc;
6) После цикла, выставляю '\0' в качестве значения для последнего элемента строки;
7) Если буфер заполнен не полностью, усекаю размер буфера до размера строки при помощи realloc.
Все правильно делаю? Или можно как-то иначе и лучше сделать это?

Ответы: >>627515

17 Янв, 15:31 #436 #627508

>>627423
Ты внатуре ебанько, он пишет за баг в либс, хотя его там нет, заебись так сделать memcpy как memmove. Короче о чём с тобой говорить....

Ответы: >>627759

17 Янв, 15:38 #437 #627515

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

> realloc
Не пользуйся этим говном. Память не нужно реалацировать, память нужно выделять и связывать.

Ответы: >>627522

17 Янв, 15:44 #438 #627522

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

>Не пользуйся этим говном.
А вот здесь по-подробней. Что не так с этой функцией?

Ответы: >>627579

17 Янв, 16:43 #439 #627579

>>627522
> А если вместо пользователя файл
И что, там будут строки больше 1кб? Вот ты прочитал строку, дальше ты с ней что делаешь?

> Что не так с этой функцией?
Всё так, я просто боевой школьник, и иметь кучу вызовов алока/реалока - странно, суть всегда в том, чтобы сразу выделить много и этим пользоваться. Усекать уж точно не нужно, как и давать возможность пользователи запросить бесконечно много памяти.

33 Кб, 453x323

18 Кб, 421x90

17 Янв, 19:41 #440 #627677

Поясните, почему при вводе кириллицы он показывает 4-байтный хекс, но 1-байтный sizeof?

Ответы: >>627686, >>627719

17 Янв, 20:01 #441 #627686

>>627677
Потому что ты дебил и не понимаешь смысла оператора sizeof.

Ответы: >>627692

17 Янв, 20:07 #442 #627691

Язык с++ Одну из ниже перечисленных ПРОШУ, ПОМОГИТЕ. ЗАВТРА ВЫЕБУТ
1. Программа, подсчитывающая, в какой день недели родились. Входные данные - дата рождения.
2. Программа, считающая количество полных дней с даты рождения. Входные данные - дата рождения и текущая дата.
3. Программа, определяющая, високосный ли год. Входные данные - год.

Ответы: >>627713

17 Янв, 20:07 #443 #627692

>>627686
Нет, это ты даун, раз сразу не понял, в чем здесь проблема.
Это тупое переполнение char, надо делать unsigned.

17 Янв, 20:32 #444 #627713

>>627691
Это не С++ тред. Но кажется, эти задания я видел у старины Бьерна. Там в главе про классы кажись.

17 Янв, 20:47 #445 #627719

>>627677
Просто char в функциях с переменным числом аргументов автоматически преобразуется к int. Спецификатор %x предназначен как раз для вывода int, и этот самый int он и выводит. Но размер типа char от этого, конечно же, не меняется, поэтому второй спецификатор выводит 1.

Ответы: >>627731

17 Янв, 21:10 #446 #627731

>>627719
>int
Собственно говоря потому, что при вызове функции в С, на стек аргументы так и кладутся, интами, ну, кратно.

Ответы: >>627752

17 Янв, 21:48 #447 #627752

>>627731
Если функция принимает char (есть формальный параметр), то на x86 компилятор может сделать push eax, не обнуляя старшие биты eax. Если функция с переменным числом аргументов, компилятор обязан будет сначала сделать movsx.

17 Янв, 21:57 #448 #627759

>>627508
Он пишет про workaround для решения проблем, вызванных некорректным использованием memcpy() разработчиками софта.
>заебись так сделать memcpy как memmove
По факту там хуйнули патч для x86 архитектуры, что заместо memcpy() вызывался memmove(), т.к. он работает нормально с overlapped буферами. Каким макаром замечание, что
>если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove
противоречит Линусу, я не понимаю. Хотя о чём с тобой говорить.............

Ответы: >>627787, >>627800

17 Янв, 22:35 #449 #627787

>>627759
Проиворечит линусу то, что он допускает неправильное использование memcpy, при перекрывающихся (и пошёл хуярить именно на либу), а ты предлагаешь человеку делать "как надо" - но ты нихуя не улавливаешь ни связи, не смысла - уёбок, что с тобой сделать................................

Ответы: >>627800

17 Янв, 22:55 #450 #627800

>>627787
>>627759
Вы уже надоели! Читаю вас и не могу понять, о чем вы спорите. Какие-то последователи Линуса или что-то еще. Просто объясните мне. Читаю я значит в мане, что рекомендуется использовать вместо memcpy, memmove в случае, если одна область (в которую копируем) накладывается на другую. Что не так?

Ответы: >>627850, >>627880

17 Янв, 23:17 #451 #627821

Не напомните, GTK3 имеет обратную совместимость с GTK2. Или они все сломали? Просто думаю вкатиться по этому протухшему мануалу https://developer.gnome.org/gtk-tutorial/2.90/ , так как других не вижу.

Ответы: >>627829

17 Янв, 23:23 #452 #627829

>>627821
>думаю вкатиться
>GTK
Бросай эту протухшую затею.

Ответы: >>627835

17 Янв, 23:28 #453 #627835

>>627829
Но почему? Что в нем плохого?

Ответы: >>627841

17 Янв, 23:34 #454 #627841

>>627835
Он умирает

Ответы: >>627851

17 Янв, 23:41 #455 #627850

>>627800
Тоже не могу понять, о чем спор. То, что в каких-то линуксах реализация memmove практически идентична по быстродействию memcpy, не означает, что так будет в других реализациях на других платформах. Поэтому правила остаются теми же:
1) memmove, если области перекрываются или есть сомнения.
2) memcpy в остальных случаях.

Ответы: >>627858, >>627880

17 Янв, 23:42 #456 #627851

>>627841
Понятно. Очередной Qt фанатик. А я надеялся ты аргументируешь как-то. На линуксах оно живее всех живых ведь. GNOME 3 хоть и утратил популярность, но держится на плаву. А крыса и вовсе сейчас процветает (вероятно скоро самой популярной станет), так как у нее многие пользователи — это беженцы с тех же KDE и GNOME, в которых от релиза к релизу все ломают. Также есть множество людей, которые предпочитают чистый Си, а не кресты (я не из таких). Впрочем, это уже тема для срача.

Ответы: >>627852, >>628002

17 Янв, 23:44 #457 #627852

>>627851
Я не фанатик, я просто реалист. Когда даже такие крупные проекты как, например, Wireshark валят с гтк (или скорее валят на qt), это о чем-то говорит.

Ответы: >>627858, >>628047

17 Янв, 23:56 #458 #627858

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

>>627852
https://en.wikipedia.org/wiki/List_of_GTK%2B_applications
https://en.wikipedia.org/wiki/Category:Software_that_uses_GTK%2B
Ну да. Действительно умирает. Кстати, я почему-то думал, что хромиум на Qt. А оказывается вот оно как. Два единственных браузера и то зависят от мертвого тулкита.

18 Янв, 00:47 #459 #627880

>>627800
>>627850

Ответы: >>627883

18 Янв, 00:48 #460 #627883

>>627880
Внимание не обращайте, делайте как написано в мане, а не как васяны-хакеры могут, и не будет такой хуйни по итогу.

18 Янв, 10:10 #461 #628002

>>627851
>GTK
>чистый C
насмешил

18 Янв, 11:44 #462 #628047

>>627852
Должен заметить, что ваешарк на кт редкостное глюкавое неузабельное говно получилось пока.

Ответы: >>628236

18 Янв, 15:44 #463 #628236

>>628047
Они еще тестируют его. И пока у них две версии (Qt, GTK), рано еще говорить о чем-либо говорить. Есть вероятность, что они и в Qt найдут какой-нибудь фатальный недостаток, коих у обоих тулкитов достаточно.

18 Янв, 15:53 #464 #628240

Я правильно понимаю, что если у GTK лицензия LGPL, то его можно использовать для создания проприетари?

18 Янв, 15:57 #465 #628244

>>609376 (OP)
Теку от этой шапки.

Ответы: >>628249

18 Янв, 16:02 #466 #628249

>>628244
Ты бы и от собаки тек.

203 Кб, 960x960

18 Янв, 23:07 #467 #628618

Сканер портов то скиньте обратно, глянуть хочу чёт, будьте же вы людьми.

Ответы: >>628622

18 Янв, 23:10 #468 #628622

>>628618
Что тебе нужно? Ты так коряво сказал, что я подумал, что ты хочешь чтобы тебе запили сканер портов.

Ответы: >>628627

18 Янв, 23:11 #469 #628627

>>628622
Я про >>620355

Ответы: >>628628

18 Янв, 23:13 #470 #628628

>>628627
Если ты удалил это у себя, то уже не вернуть. Он никому не нужен, чтобы его хранить. А за твои ошибки тебе уже поянили.

Ответы: >>628629

18 Янв, 23:14 #471 #628629

>>628628
Да это не я, просто тредами как-то не баловался ещё, буду базу данных писать, запилю её на тредах, чтоль, один обработчик ввода, другие - выполнение. Ввод/вывод - пайпы, или сокеты, хмм....

Ответы: >>628637

164 Кб, 963x1340

18 Янв, 23:19 #472 #628634

>>609376 (OP)
Ребят, кстати, почему в рекомендациях нет "Искусства Эксплойта" второго издания Эриксона? Там же охуенное введение, как в С, так и сразу же на наглядных примерах его применение. Там даже с отладчиком сразу показывают, как работать надо.
http://www.ozon.ru/context/detail/id/4833854/
хотя по любому уже и так в сети есть

Ответы: >>628637, >>628649, >>628656, >>628736, >>629136, >>629139

18 Янв, 23:21 #473 #628637

>>628629
Почитай про мнопоточность лучше. В случае с серваками, если я не ошибаюсь применяют две модели: 1) поток на соединение; 2) поток управляемый событием (то есть потоки используются по мере надобности);
Не расходуй ресурсы процессора впустую. На ввод/вывод требуется очень мало ресурсов процессора. Оно там не нужно.

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

Ответы: >>628644, >>628648

18 Янв, 23:25 #474 #628644

>>628637
> Почитай про
Я и так вкурсе вопроса.

>Оно там не нужно
Что значит не нужно, а кто будет рождать потоки на выполнение? Я хочу чтобы можно было, например параллельно вести поиск чего-то по базе. Да и её саму (базу) в отдельный процесс.

Ответы: >>628652

18 Янв, 23:26 #475 #628648

>>628637
Хз, я по нему 6 лет назад на Си кодить учился.

Ответы: >>628652

18 Янв, 23:27 #476 #628649

>>628634
Там говняный синтаксис асма.

Ответы: >>628659

18 Янв, 23:29 #477 #628652

>>628644
>Я и так вкурсе вопроса.
Сомневаюсь, если ты собрался на I/O выделять отдельные потоки. Или может я тебя не правильно понял, В любом случае, то что ты просил уже нет. Да и не нужно оно, так как не было сделано нормально (массив потоков в 4Гб).

>>628648
Ширусы писал?

Ответы: >>628656

18 Янв, 23:34 #478 #628656

>>628652
>если ты собрался на I/O
Это же база в отдельно процессе, её I - это приказы на выполнение чего-то. Да хуй с ним.

>>628634
Есть же модное импорто-замещение, касперски.

Ответы: >>628657

18 Янв, 23:36 #479 #628657

>>628656
> касперски
В общем-то, в очередном треде, советую почитать его писанину, про оптимизацию.

Ответы: >>628660

18 Янв, 23:37 #480 #628659

>>628649
Интеловский жи. Чем он так плох?

Ответы: >>628662, >>628666

18 Янв, 23:38 #481 #628660

>>628657
Очень давно его не читал. Но честно говоря год назад наткнулся на его вью и как-то он имхо, как человек, дико испортился. Видимо после визита ФБР.

18 Янв, 23:39 #482 #628662

>>628659
Здесь вечный срач. Интелловский самый распространенный, так как интел его продвигает. AT&T многие считают очень удобным и более логичным. Но он настолько мало распространен.

Ответы: >>628664

18 Янв, 23:41 #483 #628664

>>628662
> AT&T
Он правильный, но не красивый. Как тут сравнивать.

18 Янв, 23:42 #484 #628666

>>628659
Он там как раз AT&T.

Ответы: >>628668, >>628670

18 Янв, 23:44 #485 #628668

>>628666
Как можно зная один синтаксис, не осилить другой. Они же все равно похожи очень.

Ответы: >>628672

18 Янв, 23:45 #486 #628670

>>628666
А, нет, там, вроде, интеловский. Зря я сиранул на синтаксис.
Посоветуйте, как проще всего смотреть код сишных функций в дизассемблере, и я пойду обмазываться. До этого изучал в отладчике только проги на чистом асм.

Ответы: >>628684

18 Янв, 23:46 #487 #628672

>>628668
AT & T неприятный.

Ответы: >>628673

18 Янв, 23:46 #488 #628673

>>628672
Чем? Он скорее не привычный.

Ответы: >>628678

18 Янв, 23:48 #489 #628678

>>628673
% % % % % %

Ответы: >>628682

18 Янв, 23:49 #490 #628682

>>628678
Сложно запомнить, что регистры начинаются с % (%eax, %ebx или %rax %rbx) и значения с $ ($0x80, $40 и т.д)?

Ответы: >>628688

18 Янв, 23:49 #491 #628684

>>628670
>как проще всего смотреть код сишных функций в дизассемблере
Как это вообще понимать? Может глазами, там.

Ответы: >>628697

18 Янв, 23:50 #492 #628688

>>628682
Это не сложность, это некрасивость.

Ответы: >>628691

18 Янв, 23:51 #493 #628691

>>628688
Тебе смотреть на него или писать? В любом случае, код на нем более самодокументируемый.

18 Янв, 23:53 #494 #628697

>>628684
Например, мне нужно узнать, во что скомпилилась конкретная функция. Как ее найти в кратчайшее время?

Ответы: >>628703

18 Янв, 23:56 #495 #628703

>>628697
Скомпилить с флагом -S и прочитать вывод в текстовом файле?

19 Янв, 00:26 #496 #628736

>>628634
http://www.proklondike.com/books/hacking/ericson_Haking_iskustvo_exploita_2009.html
Тут даже с исходниками.

Ответы: >>628749, >>628752, >>629136

19 Янв, 00:34 #497 #628749

>>628736
Ну ладно, ладно, убедили, скачаю. пойду memcpy использовать как memmove - хакирь же. Напишу плагин к браузерам, что-бы можно было красивую и мелковесную рекламу вешать - вот будет заебись

19 Янв, 00:39 #498 #628752

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

Ответы: >>628768

19 Янв, 00:55 #499 #628768

>>628752
> начать писать кроссплатформенный код
Я бы хотел добавить, платформы и их популярность меняются достаточно часто, относительно того, что у новичка да и у других бывает в голове. Вот перешли все на 86-64, и охуели c того, что int может быть не равен размеру void*, да и стандарты до, были не полны, щас с11 - это реально глыба, и самое правильное на чём нужно писать в С. И так-то правильно понимать что ты пишешь, но не забывай что стандарт - это то в чём пересекаешься ты и те кто реализуют этому коду работу. Остальное - чёрная дыра.

19 Янв, 10:43 #500 #628982

Такая задача в ЕГЭ.
Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих четных элементов в целочисленном массиве длины 30.
Вот мое решение. Правильно?
алсо, как сделать проверку на пустой элемент массива?
http://pastebin.com/xJGMMST1

Ответы: >>628990

19 Янв, 11:00 #501 #628990

>>628982
Тебе разве здесь не нужно найти максимальное количество подряд идущих элементов? У тебя сейчас ищется общее количество подряд идущих. А по поводу пустого элемента — никак. В элементах, которые у тебя есть, могут быть любые числа. Даже если ты инициализируешь их каким-то числом, это может быть неправильно, так как придется зарезервировать одно число для этого.
По поводу кода. Зачем тебе sdafx, iostream и locale? Они не нужны. locale может пригодится, разве чтобы на кириллице писать. Зачем тебе system? Это тоже излишне.

Ответы: >>628993

19 Янв, 11:04 #502 #628993

>>628990
sdafx стандарт в vs
iostream и locale, локале забыл убрать, иострим для остановки программы.
А точно, сейчас переделаю.

Ответы: >>629001

19 Янв, 11:10 #503 #628995

Вот
http://pastebin.com/c1iJjDLj

Ответы: >>629412

19 Янв, 11:23 #504 #629001

>>628993
Ты еблан даже не знаешь зачем sdafx нужен. Это блядь файл с прекомпилированными блядь заголовками, для проекта уровня laba2 они не нужны, потому что он и так за пару секунд компилиться.

Ответы: >>629004

19 Янв, 11:25 #505 #629004

>>629001
Я же даун, что ты доебался, просто проверь правильность решения и иди нахуй.

Ответы: >>629007

19 Янв, 11:27 #506 #629007

>>629004
Ты сам не можешь проверить? Записал программу, скомпилировал, запустил, смотришь на результаты. В чем проблема?

Ответы: >>629008

19 Янв, 11:29 #507 #629008

>>629007
Там еще тип эффективность смотрится.
Я вот хз.

Ответы: >>629011

19 Янв, 11:32 #508 #629011

>>629008
Лично мне, лень рассматривать внимательно твой быдлокод. У меня есть и другие дела. Думаю у других, здесь находящихся, все так же. У тебя простейшая задача. Сделал? Работает? Иди сдавай! Эффективно сделаешь когда ума наберешься.

>>629008
>хз
Ясно)))))

Ответы: >>629021

19 Янв, 11:43 #509 #629021

>>629011
Ну ясно тогда, удачи в делах

19 Янв, 13:31 #510 #629091

Только что узнал, что размер bool - 1 байт, охуеть.
Зачем он тогда нужен?

Ответы: >>629335

19 Янв, 14:30 #511 #629136

>>628736
>>628634
Так ли хороша эта книга? На одном книжном сайте писали, что программы там суперхуевы, а другой каментатар ответил, что реальные программы пишутся так же, и поэтому изучение говна дает понимание того, как говно хекать.

Ответы: >>629395

19 Янв, 14:36 #512 #629139

>>628634
Пиздец, стоит ли читать блевоту в начале, если я осилил всего Кернигана и Ричи? Будет ли польза? Я думаю, нет.

Ответы: >>629140

19 Янв, 14:37 #513 #629140

>>629139
Лучше стандарт прочти. Гораздо полезнее.

19 Янв, 17:22 #514 #629257

Почему в си до сих пор нельзя объявлять переменные в заголовке for? Что в этом сложного?

Ответы: >>629264

19 Янв, 17:27 #515 #629264

>>629257
Повторюсь для тебя: "Стандарт прочти."
В С11 уже можно объявлять локальные переменные в любых блоках, в том числе и в заголовке фора.

19 Янв, 18:54 #516 #629335

>>629091
>bool
Сам без понятия нахуя оно нужно, вот еслиб он конвертировал возврат из функции (из стандартных) как "получилось", "не получилось" - это другое дело, только это не С. Но а так то - прост)

Ответы: >>629354

19 Янв, 18:59 #517 #629338

Да и размер bool, хуй его знает я не знаю имеет ли спецификацию. Тут же всё просто, 0 - false, всё остальное - true.

Я обычно пользуюсь 1 - true, 0 - что-то специальное, <= -1 ошибка, её тип.

Ответы: >>629354

19 Янв, 19:18 #518 #629354

>>629335
В Си есть _Bool

>>629338
> <= -1 ошибка, её тип.
> 0 - что-то специальное
Что-то странная система.

Ответы: >>629361

19 Янв, 19:22 #519 #629361

>>629354
> bool
> _Bool
Одно и тоже.

> Что-то странная система
Она логичная, есть диапазоны положительного исхода, есть отрицательного. Выявить принадлежность просто, >0 или <0. Что тут странного?

Ответы: >>629409

19 Янв, 19:50 #520 #629395

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

Ответы: >>629409, >>629424

19 Янв, 20:01 #521 #629409

>>629361
>Одно и тоже.
И я о том же.

>Что тут странного?
Все нормально. Просто я не выспался и перемешалось все в голове.

>>629395
> всю еблю с указателями, памятью, переполнениями буферов и,
Это в K&R есть.

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

Ответы: >>629423

19 Янв, 20:03 #522 #629410

Кстати, по Си ведь еще книга С. Прата есть. Вроде тоже достаточно не плохая.

Ответы: >>629424

19 Янв, 20:05 #523 #629412

>>628995
Я, конечно, сам в Си новичок, но я правильно понял, что ты делаешь массив без объявления элементов этого самого массива?

Ответы: >>629417

19 Янв, 20:07 #524 #629417

>>629412
Я так понял он просто алгоритм описал, чтобы проверили, правильно или нет.

Ответы: >>629430

19 Янв, 20:10 #525 #629423

>>629409
> "Компьютерные сети" Таненбаума
А чё не снайдер? Чтобы вкатится сходу, можно накатить статейку шаргина на рсдн Программирование сокетов в Linux.

Ответы: >>629440

19 Янв, 20:10 #526 #629424

>>629410
>Stephen Prata "C Primer Plus, 6th Edition" (2014)
Уже есть.

>>629395
>Это в K&R есть.
Только там все с крайне наглядными примерами в отличие от K&R

>А это, уже не имеет прямого отношения к самой Си
с чего это не имеет?

В общем, мое дело предложить. Елси ты уже такой охуенный парень, что освоил C по K&R, то только успехов тебе на поприще остается пожелать.

Ответы: >>629425, >>629440

19 Янв, 20:11 #527 #629425

>>629424
>с чего это не имеет?
Ну тип потому что)

19 Янв, 20:13 #528 #629430

>>629417
Как-то криво, имхо, идет работа с max и submax, мне почему-то кажется, что это можно соорудить с использованием всего одной переменной.

Ответы: >>629436

19 Янв, 20:16 #529 #629436

>>629430
Павильно. В случае, если где-то в середине массива условие не будет соблюдаться, submax'y опять присвоится 0, и дальше твой if if(max<submax) будет False, в следствие чего и max будет считаться не правильно.

19 Янв, 20:19 #530 #629440

>>629423
Может лучше сначала изучить как работает сеть, перед тем, как йписать приложения для работы с ней? Таненбаум дает фундаментальные знания просто.

>>629424
>Только там все с крайне наглядными примерами в отличие от K&R
Не осилил примеры из K&R?

>с чего это не имеет?
Потому, что это сторонние API, а не стандарт Си.

> Елси ты уже такой охуенный парень, что освоил C по K&R
Ну охуеть теперь.

Ответы: >>629447

19 Янв, 20:22 #531 #629447

>>629440
>Может лучше сначала изучить как работает сеть
Лучше, всё-же, сходу иметь работающий код, а потом сидеть понимать как он работает, модифицирую его там, переписывая на более низкий уровень, итп. Хотя это всё, например, дискуссионно.

Ответы: >>629450

19 Янв, 20:24 #532 #629450

>>629447
>Хотя это всё, например, дискуссионно.
Это спор о том, сверху или снизу начинать.

19 Янв, 20:43 #533 #629482

Платиновый вопрос: как программы на сишке взаимодействуют с другими (внешними) программами на ней же, допустим из ГНУшных утилит?
То есть, допустим, я могу вызвать grep из сишки? Могу скормить вывод ls?

Ответы: >>629494, >>629506

19 Янв, 20:49 #534 #629494

>>629482
>Платиновый вопрос: как программы на сишке взаимодействуют с другими (внешними) программами на ней же
Посредством:
1) Перенаправление вывода другой программы;
2) FIFO;
3) Сигналы.

Ответы: >>629496, >>629551

19 Янв, 20:50 #535 #629496

>>629494
>То есть, допустим, я могу вызвать grep из сишки? Могу скормить вывод ls?
Перенаправление потоков. То есть stdout одной программы (ls) перенаправляется на stdin grep.
В качестве теста, можешь в цикле, прогнать getchar.

Ответы: >>629500

19 Янв, 20:51 #536 #629499

Запуск: ls | твоя программа.

19 Янв, 20:51 #537 #629500

>>629496
Он наверно про system()

Ответы: >>629501

19 Янв, 20:52 #538 #629501

>>629500
Не внимательно прочитал.

19 Янв, 20:55 #539 #629506

>>629482
https://en.wikipedia.org/wiki/Inter-process_communication

Ответы: >>629511, >>629551

19 Янв, 20:58 #540 #629511

>>629506
>>625885
>Например, под линь можно почитать боровского - коротенькие статейки с примерами.

Ответы: >>629551

259 Кб, 1280x1024

19 Янв, 21:07 #541 #629516

Интересно, откуда здесь взялся pop ecx? Ведь мы ecx до этого не сохраняли, а сохраняли ebp, который здесь вытаскиваем. Зачем? Эта инструкция повторяется десять раз, хотя мы ничего не кладем на стек кроме адреса возврата, который после выполнения call сам оттуда извлекается.

Ответы: >>629518, >>629525

19 Янв, 21:09 #542 #629518

>>629516
Блджад, хуево обрезал заголовки, где обмазывался на лурке пастами 600-куна.

Ответы: >>629519

19 Янв, 21:11 #543 #629519

>>629518
Про пизду то смешно?

Ответы: >>629520

19 Янв, 21:13 #544 #629520

>>629519
Нет, пасты про лисперов и хаскелистов смешнее.

19 Янв, 21:16 #545 #629525

>>629516
Это достали из стека адрес аргумента printf, зря поторопился спрашивать.

19 Янв, 22:13 #546 #629551

>>629511
>>629506
>>629494
Спасибо!

20 Янв, 01:01 #547 #629687

У кого сурс шапки? Го перекатывать.

ПЕРЕКАТ 20 Янв, 01:27 #548 #629718

Запилил по-быстрому перекат со старой шапкой.

>>629715 (OP)
>>629715 (OP)

Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 28 января 2016 года.

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

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

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion