Сохранен 548
https://2ch.hk/pr/res/609376.html
Прошлые домены больше не функционируют, используйте адрес ARHIVACH.HK.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

C Programming Language #3

 Аноним 22/12/15 Втр 01:54:19 #1 №609376 
14507384590760.png
Третий тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годныму средству программирования как на системном, так и на прикладном уровне.

Что читать:

- Классика от Отцов: 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/12/15 Втр 02:49:49 #2 №609388 
пук
Аноним 23/12/15 Срд 07:08:45 #3 №610139 
>>609376 (OP)
Посоны. Че там ~у хохлов~ в новом стандарте?
Шаблоны завезли? Многопоточность завезли?
Как там вообще?
Аноним 23/12/15 Срд 08:29:52 #4 №610151 
>>610139
Завезли еще немного юникода (никто не пользуется), многопоточность (никто не пользуется) и костыль вместо шаблонов (погугли _Generic). Ну и еще немного плюшечек туды и сюды. Как-то так.
Проектирование на Си Аноним 24/12/15 Чтв 04:23:34 #5 №610977 
Кто-нибудь когда-нибудь видел книжки о том, как правильно проектировать на Си? Что-нибудь вроде Александреску или Б4. Всё что удалось найти это обоссаная книжка про эмуляцию ООП, что и без неё ясно.
Аноним 24/12/15 Чтв 05:30:59 #6 №610993 
>>609376 (OP)
Благословляю хорошую шапку.
мимокрестоанон
Аноним 24/12/15 Чтв 10:56:13 #7 №611091 
>>610977
Си, по сути, остается таким же незамысловатым процедурным языком, каким он был в семидесятых. Правда, теперь в нем есть ограниченная поддержка модулей, опирающаяся на два ключевых слова: extern и static. Поэтому старые добрые книжки по структурному программированию тебе в помощь.
Аноним 24/12/15 Чтв 11:28:50 #8 №611108 
Какие плюсы у чистого си?
Аноним 24/12/15 Чтв 11:58:06 #9 №611115 
14509474868510.jpg
>>611108
Два плюса.
Аноним 24/12/15 Чтв 12:12:10 #10 №611121 
>>611115
Шутку про инкремент этому господину.
Аноним 24/12/15 Чтв 13:39:56 #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 и должна уметь пользоваться данными из этой структуры. Выглядит как говно.

На чистом си вообще можно написать что-то сложнее вирусов и консольных калькуляторов?
Аноним 24/12/15 Чтв 14:34:24 #12 №611202 
>>611170
>На чистом си вообще можно написать что-то сложнее вирусов и консольных калькуляторов?
Линукс?
Аноним 24/12/15 Чтв 14:39:46 #13 №611209 
>>611202
Я имею в виду полезное прикладное ПО, а не говно мамонта. На чем пишутся математические библиотеки? Как люди пердолятся со всем этим говном, не умеющим в архитектуру?
Аноним 24/12/15 Чтв 14:50:46 #14 №611214 
>>611209
Ядро Андроида - говно мамонта?
Аноним 24/12/15 Чтв 15:14:34 #15 №611239 
>>611214
Это порезанное ядро прыщей => говно мамонта.
Аноним 24/12/15 Чтв 15:17:52 #16 №611244 
>>611239
https://ru.wikipedia.org/wiki/Ядро_Linux
> Последняя версия: 4.3 (2 ноября 2015)
Аноним 24/12/15 Чтв 15:21:32 #17 №611252 
>>611244
Ондроед на троечке базируется.
В любом случае, это легасиобразное говно мамонта вызванное недостаточным развитием железа.
Аноним 24/12/15 Чтв 15:26:46 #18 №611260 
14509600066810.png
>>611252
Профессор, вам до сих печет от успеха Линукса?
Аноним 24/12/15 Чтв 15:47:41 #19 №611300 
>>611260
Блять эти очки, рубашка и причёска. 100 процентый пидораха нахуй. Наверняка преподаёт в каком-нибудь засраном МГУ и втирает про успешность советской науки даже почти наверняка не читал никаких книг кроме советских. А эта улыбка в конец разозлила. Ещё и линукс ему наверно не угодил по вымышленной причине типа пользуйтесь отечественными аналогами.
Аноним 24/12/15 Чтв 15:52:32 #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 взлетел, а профессор со своими микроядрами соснул.
Аноним 24/12/15 Чтв 15:55:28 #21 №611316 
>>611300
> 100 процентый пидораха нахуй. Наверняка преподаёт в каком-нибудь засраном МГУ и втирает про успешность советской науки даже почти наверняка не читал никаких книг кроме советских.

Хотя вообще-то возможно, лол. Вот Вирт к примеру типичный пидорашка, любит рассказывать охуительные истории как американские рептилоиды убили европейскую науку. И СССР ему нравится.
Аноним 24/12/15 Чтв 15:56:43 #22 №611317 
>>611316
>Вот Вирт к примеру типичный пидорашка, любит рассказывать охуительные истории как американские рептилоиды убили европейскую науку
Покажи
Аноним 24/12/15 Чтв 16:00:29 #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;, пишешь конструктор, деструктор, и вперед.
Аноним 24/12/15 Чтв 16:00:50 #24 №611322 
>>611317
Лекция, когда он приезжал в Россию, ЕМНИП в блоге Алены C++ было видео. О том, какая была передовая система Lilith и язык Oberon, но нам навязали Windows и C++.
Аноним 24/12/15 Чтв 16:01:40 #25 №611324 
Аноны, на русском есть годные книги для ньюфагов?
Аноним 24/12/15 Чтв 16:02:00 #26 №611325 
>>611324
add. по c#
Аноним 24/12/15 Чтв 16:03:47 #27 №611326 
>>611321
Вот смотри более-менее нормальный сишный интерфейс для математики https://github.com/ampl/gsl/blob/master/spmatrix/gsl_spmatrix.h
Аноним 24/12/15 Чтв 17:26:19 #28 №611404 
14509671799490.gif
>>610151
>юникода (никто не пользуется)
збсь, можно будет запиливать нормальную человеческую интернационализацию в прошивках бытовых приборов.

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

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

школьник-кун
Аноним 24/12/15 Чтв 17:28:48 #29 №611405 
>>610977
Проектирование ПО != паттерны конкретного языка.
Аноним 24/12/15 Чтв 17:32:44 #30 №611411 
>>611300
Как же я проиграл, хоспаде.
Аноним 24/12/15 Чтв 17:34:47 #31 №611413 
14509676870890.png
>>611209
>Как люди пердолятся со всем этим говном, не умеющим в архитектуру?
Ебанашка, а как связаны архитектура и язык программирования?

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

Тогда у меня для тебя плохие новости!
Аноним 24/12/15 Чтв 20:23:05 #32 №611552 
Подскажите хороший IDE, пожалуйста.
Аноним 24/12/15 Чтв 20:24:50 #33 №611553 
>>611552
vim
Аноним 24/12/15 Чтв 21:26:24 #34 №611598 
14509815848800.png
>>609376 (OP)
Что делают эти строки?
Что делает тильда?


Аноним 24/12/15 Чтв 22:25:52 #35 №611676 
1. Записывает в переменную setting результат побитового и переменной Code и макроса-маски SET_IOCTL.
2. Обнуляет в переменной Code биты по маске SET_IOCTL.

Тильда - побитовое не.
Аноним 24/12/15 Чтв 22:56:19 #36 №611707 
>>611598
& - побитовый and. То есть
0110101 &
1100110 =
0100100

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

a &= b - краткая запись a=a&b
Аноним 24/12/15 Чтв 23:41:29 #37 №611733 
>>611552
emacs
sageАноним 25/12/15 Птн 09:24:17 #38 №611898 
Чому если я считываю строку с помощью
fgets(str, 128, stdin);
и использую strcat, например
strcat(str, str1);
он строки объединяет с переносом т.е. выводить будет не
"строка1строка2" а
"строка1
строка2"
а если использую gets(str);
тогда все нормально.
В чем подвох?
Аноним 25/12/15 Птн 09:24:33 #39 №611899 
>>611898
Сега прилипла
Аноним 25/12/15 Птн 12:42:24 #40 №611992 
>>611552
acme
Аноним 25/12/15 Птн 14:03:33 #41 №612027 
14510414137810.jpg
>>611992
Пайк, залогиньтесь.
Аноним 25/12/15 Птн 16:35:59 #42 №612125 
>>611898
Потому что fgets сохраняет \n в буфер, а gets ее ждет, но не сохраняет.
Аноним 25/12/15 Птн 16:37:36 #43 №612129 
>>612125
Алсо не используй gets, ты ему не можешь указать размер буфера и может быть buffer overflow.
Аноним 25/12/15 Птн 17:11:15 #44 №612160 
>>612129
fgets лучше gets?
Аноним 25/12/15 Птн 17:16:02 #45 №612165 
>>612160
Да.
Аноним 25/12/15 Птн 17:16:34 #46 №612166 
>>612165
Как тогда строки без переноса объединять?
Аноним 25/12/15 Птн 17:49:12 #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]
как связать передвижение авто и светофор? ВСЕМКУМЫСА! 26/12/15 Суб 19:22:53 #48 №613026 
14511469730760.png
Необходимо реализовать программу "автомобильный перекресток со светофорами"

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

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

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



Я в этой теме ньюбас, так что остудите горящие пуканы пжалста.
Аноним 26/12/15 Суб 22:40:17 #49 №613184 
>>613026
Ну там потоки, семафоры, мьютексы... Вот это вот всё.
Аноним 26/12/15 Суб 23:52:51 #50 №613227 
>>613026
Я б перекресток как граф рассматривал, вершина графа - собственно полоса. Например с правой можно прямо (в идеале не меняя полосы, но можно) и направо только в крайнюю полосу, с центральной только прямо (опять же в свою полосу), с левой только налево в любую полосу (например). Быдлорежим "с левой полосы направо ты тачку мою видел еп" пока не рассматриваем.

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

Как-то так, вот такие идеи. По идее рисовать надо, но ломак.
Аноним 27/12/15 Вск 12:02:14 #51 №613426 
Дано натурально число, записать его цифры. Т.е. 12356 дается, записываю 1 2 3 4 5 6.
Можно просто считывать scanf("%s", &str); и через цикл выводить?
Аноним 27/12/15 Вск 12:55:06 #52 №613434 
>>611552
Borland C++ Seattle, скачай на рутрекере.
Аноним 27/12/15 Вск 14:04:28 #53 №613485 
14512142686040.png
>>613426
Аноним 27/12/15 Вск 14:19:03 #54 №613493 
>>613485
У меня к тебе вопросы.
1)Что значит size_t
2)Что значит asprintf и snprintf
3)Что значит putchar
Аноним 27/12/15 Вск 14:26:13 #55 №613502 
Тест
Аноним 27/12/15 Вск 14:32:03 #56 №613506 
>>613493
size_t - это беззнаковый целый тип. Ну типа натуральное число. Я бы мог еще добавить, что он имеет разрядность, достаточную для хранения указателей, но лучше не буду. В принципе, можешь заменить size_t на unsigned int. В большинстве случаев эти типы совпадают.

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

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

putchar - вывод одного символа.
Аноним 27/12/15 Вск 14:34:20 #57 №613509 
>>613434
> Borland
> C++
Уходи.
Аноним 27/12/15 Вск 14:45:45 #58 №613522 
>>613506
> Я бы мог еще добавить, что он имеет разрядность, достаточную для хранения указателей
Правильнее сказать, что он имеет разрядность, достаточную для хранения размера любого объекта (т.е, для хранения результата sizeof). Размер указателя теоретически может быть как меньше, так и больше размера size_t.

>>613485
> вариант рабов Стандарта
В случае отсутствия asprintf, она реализуется буквально тремя строками. Хорошая, удобная функция, как и strdup, которой тоже в стандарте нет. А вот хранить в size_t что-то, не являющееся размером, количеством или индексом - моветон.
Аноним 27/12/15 Вск 14:50:18 #59 №613526 
>>613506
зачем size_t, когда есть unsigned int?
Аноним 27/12/15 Вск 15:02:48 #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, но это же дополнительный хедер подключать надо.
Аноним 27/12/15 Вск 15:10:15 #61 №613531 
>>613530
> Если человек спрашивает, что такое putchar, врядли стоит грузить его такими вещами.
Врать не стану, но про asprintf и snprintf я не очень понял.
Как я понял то что они динамически выделяют память. Ты даешь указатель на строку, а она выделит сама столько сколько надо. Но для чего это используется я не понимаю я до конца не понимаю.
Аноним 27/12/15 Вск 15:54:49 #62 №613557 
Немного не по адресу, но как убрать окно список ошибок, чтобы оно вообще не открывалось и осталось только окно вывод?
Аноним 27/12/15 Вск 15:55:54 #63 №613559 
14512209542280.png
>>613531
Хорошо. Давай попробуем с коментами.
Аноним 27/12/15 Вск 15:59:52 #64 №613562 
>>613559
Все, все стало понятно.
Если будут не цифры, а символы, то тогда
len = asprintf(&s1, "%c", str);
Или нет?
Аноним 27/12/15 Вск 16:00:30 #65 №613563 
14512212307320.png
>>613559
Да, забыл еще кое-что. Если ипользуешь asprintf, то потом выделенную память желательно освободить. Обрпти внимание на строки 2 и 22.
Аноним 27/12/15 Вск 16:01:46 #66 №613565 
>>613563
Освобождаем чтобы потом можно было повторно использовать s1, ну и чтобы не грузило так сказать?
Аноним 27/12/15 Вск 16:07:31 #67 №613567 
>>613562
Вот смотри. Есть функция printf. Она принимает формат и список переменных/констант для вывода. Функция выводит все указанные переменные и/или константы на стандартный вывод (чаще всего в консоль) в соответсвии с форматом. То есть, она все конвертирует в строку.

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

>>613565
Да. Чтобы не было утечки памяти.
Если тебе уже не нужна строка, сохраненная в s1, то чтобы использовать s1 для хранения другой строки, память надо освободить. Если ты просто вызовешь asprintf второй раз для s1, то функция просто выделит новую память и запишет указатель на новый блок память в эту переменную, но прежняя строка так и останется "висеть в воздухе".
Аноним 27/12/15 Вск 16:24:42 #68 №613571 
14512226820350.png
>>613567
Изобразил вот схематично. Может быть, так будет понятнее.
Аноним 27/12/15 Вск 16:42:46 #69 №613585 
>>613565
Кстати, если тебе это задание дал препод, то мне кажется, он может не принять вариант решения с использованием библиотечной функции. Так что, на всякий случай, иди вот сюда: https://ru.wikipedia.org/wiki/Itoa_%28%D0%A1%D0%B8%29 и списывай реализацию Кернигана и Ричи.
Аноним 27/12/15 Вск 16:42:58 #70 №613586 
Ебать.
Неужто в си пытаются вкатиться подобные тупорылые долбаебы котрым на пальцах нужно разжевывать ручное управление памятью.

Мимо жаба-примат
Аноним 27/12/15 Вск 16:48:35 #71 №613592 
>>613586
Дело в том, что многие вкатываются не по своей воле, а по воле преподов, которые дают такие задания до того, как объяснять что-то про управление памятью. Типа, вот я вам рассказал как объявлять переменные и делать условия/циклы. Вперед! Выполняйте задание. Для некоторых изучение Си - необходимость, которая отнюдь не вселяет в них желание побольше узнать о языке и уж точно не прибавляет энтузиазма для изучения по этой теме чего-то большего, чем рассказывают на занятиях.
Аноним 27/12/15 Вск 16:50:47 #72 №613594 
>>613585
Да не, никто не давал.
Аноним 27/12/15 Вск 17:24:45 #73 №613602 
>>613592
Хуй знает.
15 лет назад когда мне на 2 курсе преподавали теорию операционных систем, то на сях там был минимум и почти сразу перекатились на кресты.
Жаба-примат.
Аноним 27/12/15 Вск 17:54:59 #74 №613614 
14512280999160.png
Чем мое решение плохо?
Аноним 27/12/15 Вск 18:03:00 #75 №613618 
>>613614
Так у тебя же 1234567 изначально является строкой, а не числом. Ты просто ее читаешь с клавиатуры и вставляешь пробелы между символами.

Алсо, strlen лучше вынести за цикл.
Аноним 27/12/15 Вск 18:08:50 #76 №613623 
14512289306510.png
>>613618
А что в этом плохого? Наоборот же, решение более универсальное.
Так ты имел ввиду? А почему так лучше?
Аноним 27/12/15 Вск 18:33:48 #77 №613643 
>>613623
Изначальное условие было такое: дано натуральное число. Я это понял как то, что у нас есть двоичное представление этого числа, а не строковое. Но если тебя устраивает строковое представление, то можно и так, если тебя не смущает, что программа фактически работает со строками, а не с числами.

>А почему так лучше?
Потому что семантически это означает, что функция strlen должна вызываться на каждом проходе цикла. А естри strlen вынесена за цикл, то и вызываться будет только один раз. У тебя ведь длина строки не меняется по ходу цикла. Так зачем делать одну и ту же бесполезную работу на каждой итерации? Сейчас считается, что большиснтво компиляторов самостоятельно оптимизирует такие вещи. Тем не менее, в данном случае, вынесение функции за цикл выглядит более логично и является примером хорошего стиля. Причем это не я придумал. Можешь Криса Касперски почитать, например (серия статей "Сишные трюки").
Аноним 27/12/15 Вск 21:05:33 #78 №613751 
>>613602
За 15 лет общее число программистов увеличилось сильнее, чем число хороших, поэтому если раньше дегенератов было 10%, то сейчас 75.
Аноним 27/12/15 Вск 21:37:31 #79 №613769 
14512414511260.png
Предстоит в вузике экзамен по языку.
Подскажите какие-нибудь тесты порешать.
Сложнее -лучше.
Наподобии этого.
Аноним 28/12/15 Пнд 04:38:59 #80 №613981 
>>609376 (OP)
> "Си: грязные истории"
Это такая тонкота или одно из двух? Поисковики находят только этот тред, а хочется почитать.
Аноним 28/12/15 Пнд 05:35:07 #81 №613990 
Сосоны. Написал сканер портов. Где я соснул?
http://pastebin.com/p4m2Sg6i
Выдает ошибку сегментирования.
Аноним 28/12/15 Пнд 05:41:17 #82 №613991 
Если записать int a,b,c,d,e,f,g; то будут ли они занимать те же ячейки памяти, что и элементы int penis[5]; ?
Аноним 28/12/15 Пнд 05:48:19 #83 №613992 
>>613991
Нет. Они могут и в регистрах быть. Вообще сишечку создавали в качестве абстрактного ассемблера, где намеренно замалчивается конкретная реализация регистров и памяти.
Аноним 28/12/15 Пнд 06:24:28 #84 №613997 
>>613981
Это толстота. Оно на английском http://btdigg.org/search?info_hash=&q=Expert+C+Programming.+Deep+C+Secrets

>>613990
Собираешь с отладочной информацией (gcc -g), пускаешь под gdb, оно говорит, где ты соснул. Ты рассказываешь нам, и мы разбираем проблему.
Аноним 28/12/15 Пнд 06:31:55 #85 №613998 
>>613990
Но вообще, тебе нужно выделять каждому потоку свой ip, и пробрасывать его через pthread_create если уж ты каждому подключению отдельный тред выделяешь. Алсо, адрес весьма просто инкрементируется одним циклом, а не этим безобразием.
Аноним 28/12/15 Пнд 06:50:43 #86 №614000 
>>613997
http://pastebin.com/yBAnDyVK такая вот хуйня.

Аноним 28/12/15 Пнд 07:25:41 #87 №614005 
>>614000
У тебя ip = NULL, туда пишет sprintf, это нормально? Алсо, после создания потока туда снова пишет sprintf, хотя поток мог еще не успеть воспользоваться значением из буфера.
Аноним 28/12/15 Пнд 07:27:09 #88 №614006 
>>614005
Да в принципе хуй с ним. Спасибо за помощь, пацаны. Напишу на масме, это быстрее, чем ебаться с сишкой.
Аноним 28/12/15 Пнд 07:28:37 #89 №614007 
>>614006
Нихуя не быстрее. Пофикси еще переменные i, j, u, y, их никто за тебя нулем инициализировать не будет.
Аноним 28/12/15 Пнд 07:40:30 #90 №614010 
>>614007
Еще как быстрее. Сейчас увидишь.
Хули там, wsa стартуешь, инкрементируешь ecx и через ustr$ переводишь в текст, потом добавляешь в пременную, добавляешь точку и еще так 4 раза, потом обновляешь и все ок. В поток отправляешь всю хуйню, тот быстро копирует и все. Ну короче элементарно бля. Там ебли намного меньше, чем с сишкой.
кстати зря многие говорят, что масм - язык низкого уровня. он высокоуровневый, как и другие языки ассемблера. Более высокоуровневый fasm, но мне масм больше нравится
Аноним 28/12/15 Пнд 10:28:07 #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();
}

Говнокод, но суть понятна.
Аноним 28/12/15 Пнд 13:21:18 #92 №614122 
14512980787650.png
Юзер дает нам 2 слова, наша задача определить сколько раз встречается буквосочетание заданной длины с заданной позиции, во втором слове.
Вот мое решение, но оно не верное. И не до конца правильное в плане поставленного условия.
Аноним 28/12/15 Пнд 17:13:07 #93 №614262 
>>613509
Это ты уходи, он и в Си может.
Аноним 28/12/15 Пнд 19:42:07 #94 №614396 
>>614046
>0x7f000001
Как тонко.

>>614122
Ты объясняешь задачу как омич.
Там цикл надо добавить в strstr, а возвращаемое значение использовать как первый аргумент функции.
Аноним 28/12/15 Пнд 21:15:20 #95 №614465 
>>611310
Да что вы вспоминаете срач более чем 20-летней давности! Сам Таненбаум с тех не критикует линуксы. Линуксы с давних пор уже не монолитные, а по большей части модульные. Да и с микроядрами он не соснул, так как сделал надежную ОС (правда для учебных целей и встроенных систем). Просто данную идею сложно реализовать, так как найдется немного людей, которые будут создавать с нуля ОС, опираясь на архитектуру.
Аноним 28/12/15 Пнд 21:19:42 #96 №614469 
>>613769
Почитай об указателях. Попробуй сам попрактиковать. А то, что на пике - абсолютно бессмысленное дерьмо. Ярчайший пример говнокода. Такое вряд ли часто пишут. Но хорошо понимая логику работы с памятью и собственно сами указатели, даже это можно понять за пару минут.
Аноним 28/12/15 Пнд 23:33:46 #97 №614608 
Супец громисты!
Есть один проект и этот проект писан под линуксы с использованием пары либ, в т.ч. libusb. Взял я значит его, сунул в проект кодблоксов под виндами, скачал прекомпиленные mingw либы, положил рядом, настроил в кодблоксах опции сборки (build options -> search directories -> compiler/linker, сунув туда, соответственно пути к директориям include и lib библиотек). И соснул большого, получив целый ворох undefined reference'ов, например:
> undefined reference to `libusb_get_bus_number

Что я сделал не так, кроме использования виндов? Дайте советов мудрых. В гоголе, стеке и прочем уже искал.
Аноним 29/12/15 Втр 03:18:33 #98 №614704 
>>614608
> сунув туда, соответственно пути к директориям include и lib библиотек
Так же, как инклуды нужно использовать в исходнике, так и используемые либы нужно явно указать линкеру, а не только место, где их искать. В командной строке ты можешь сделать -lusb, поищи подобное в Code::Blocks.
Аноним 29/12/15 Втр 18:16:37 #99 №615052 
14514021979140.png
>>614704
Понял, разобрался, помогло. Большое спасибо, анон!
Аноним 30/12/15 Срд 10:43:45 #100 №615517 
>>613769
[code]--++cpp[/code]
лолшто, это говно вообще можно скомпилировать?
Аноним 30/12/15 Срд 10:54:38 #101 №615520 
>>614396
>Как тонко.
Чё тонкого то? Логично, что тестировать программу будешь на локалхосте в начале.

>>614000'
>This page has been removed!
Чё ты исходники поудалял, пидор? Секретные дохуя?
Аноним 30/12/15 Срд 22:31:48 #102 №615932 
[code lang="c"]
#include "test.h"
[/code]
Аноним 30/12/15 Срд 22:41:54 #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);
}
СИ трабл 30/12/15 Срд 23:06:53 #104 №615980 
14515060131510.png
14515060131511.png

Привет, Анон! НИд халп!
Ситуация следующая.
Есть функция, в которой создается массив типа 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!! Где моя ошибка, подскажи Анон? На пикче код и отладчик. ( использование средств языка весьма ограничено, не обращайте внимание на реализацию )
Аноним 31/12/15 Чтв 05:15:06 #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 ненулевых байта подряд...

школьник-кун
Аноним 31/12/15 Чтв 05:16:36 #106 №616146 
>>616145
ptr_ar должен быть с кватратными скобками, но движок их захавал, бида-пичать!
Аноним 31/12/15 Чтв 13:33:37 #107 №616229 
14515580170820.png
Привет, няши.
Передо мной стоит такая задача: принять по UART несколько пакетов, описание протокола есть, осталось понять, как эффективнее это сделать.
Когда приходит байт - вызывается прерывание.
Как более эффективно складывать в буфер байты и далее находить в нем пакеты?
Вижу 2 варианта, поясните за плюсы и минусы:
1. Кольцевой буфер, вот такой вариант: http://microsin.ru/content/view/1098/44/
как только в нём появится новые данные, в главном цикле забираю байт, прогоняю через конечный автомат, который ищет начало пакета, данные и конец пакета.
2. Кольцевой буфер, который работает так: если массив заполнился, смещает в цикле все элементы буфера (цикл в том же прерывании выполняется), добавляет ноль в конец массива.
Далее можно уже в главном цикле при помощи привычных функций из string.h и stdio.h найти пакет и т.д.
Вот тут походу минус в том, что в прерывании крутится цикл.
Аноним 31/12/15 Чтв 13:45:54 #108 №616233 
14515587542250.jpg
>>616229
>2. ...
Допустим ищешь ты пакет в главном цикле, работает какой-нибудь scanf и тут БАЦ! приходит новый байт и весь буфер смещается на один элемент.
Что случится?
Аноним 31/12/15 Чтв 13:55:55 #109 №616235 
>>616229
>Как более эффективно складывать в буфер байты и далее находить в нем пакеты?
Конечным автоматом.
> смещает в цикле все элементы буфера
Каким образом? Копированием? Чем это лучше простого сдвига указателя в случае кольцевого буфера? Хуита какая-то.
Аноним 31/12/15 Чтв 13:57:04 #110 №616236 
>>616229
Какого типа протокол?
Запрос-ответ, или потоковый асинхронный?

Вообще-то оба твои варианта- сорта говна, причём второй полное ровно, а первый может не подойти для протоколов типа запрос-ответ.
Аноним 31/12/15 Чтв 14:05:58 #111 №616240 
>>616235
>Каким образом? Копированием? Чем это лучше простого сдвига указателя в случае кольцевого буфера? Хуита какая-то.
Да, копированием.
>Конечным автоматом.
Это хорошо.
>Какого типа протокол?
>Запрос-ответ, или потоковый асинхронный?
Потоковый асинхронный.
На некоторые пакеты надо отправить что-то в ответ.
В основном только принимаю.
Аноним 31/12/15 Чтв 14:14:26 #112 №616246 
>>616240
DMA есть?
Кольцевые буфера поддерживает?
Аноним 31/12/15 Чтв 14:21:34 #113 №616248 
>>616246
Да, DMA есть.
Сейчас вот смотрел про DMA: в циклическом режиме заполняет половину буфера, генерируется прерывание, далее заполняется вторая половина и генерируется прерывание.
Т.е. мне надо поставить флаги в прерывании, что типа пора обрабатывать, в главном цикле запустить обработку, при помощи конечного автомата?
Аноним 31/12/15 Чтв 14:25:38 #114 №616250 
>>616240
Зависит от железки, протокола и требуемого размера буфера, вестимо. Если тебе не лень реализовывать FSM - делай на кольцевом буфере, будет быстро и красиво. Если лень - делай это свое копирование, будет медленно и понятно.
Аноним 31/12/15 Чтв 14:27:43 #115 №616252 
>>616250
У меня протокол не сложный, с FSM не заебусь.
Вариант с копированием я увидел у одного старого погромиста с опытом, думал - во как красиво то сделано.
Оказалось, что сделано максимум хуево.
Аноним 31/12/15 Чтв 14:49:57 #116 №616262 
>>616248
Тогда делай кольцевой буфер с DMA, если там есть регистр с текущим адресом, то на прерывания можно забить: в главном цикле смотришь, разницу между текущим и прошлым значением регистра, - разбираешь соотв. число байт, разбирать лучше всего автоматом.

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

Для пинг-понга можно заюзать прерывания
Аноним 31/12/15 Чтв 15:15:30 #117 №616278 
>>616262
>в главном цикле смотришь, разницу между текущим и прошлым значением регистра, - разбираешь соотв. число байт, разбирать лучше всего автоматом.
Классный подход, мне нравится.
Аноним 31/12/15 Чтв 15:19:35 #118 №616281 
>>616278
Это типовое решение тащемта.
У меня так один знакомый хекс-файлы в бутлоадере разбирал.
школьник-кун
Аноним 31/12/15 Чтв 16:38:12 #119 №616333 
14515690924650.png
>>616281
Лови няшку.
sageАноним 31/12/15 Чтв 19:18:35 #120 №616406 
>>616333
ФУ БЛЯДЬ ФУ НАХУЙ
Аноним 31/12/15 Чтв 21:19:04 #121 №616458 
14515859447420.png
>>616406
Нульчую.
школьник-кун
Аноним 31/12/15 Чтв 22:50:45 #122 №616513 
>>616333
Продолжение?
Аноним 01/01/16 Птн 04:26:08 #123 №616564 
>>616513
К сожалению нет. Но что-то там произошло, да.
Аноним 02/01/16 Суб 14:28:55 #124 №616980 
Можно ли делать так:
char F(char s1,char s2)
{
/
тут делаем что-то со строкой s2, используя s1, при этом s1 не изменяется, а s2 - да /
возвращаем s2;
}

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

Просто мне хочется, чтобы возвращалась именно строка, а не через void. Терзают сомнения, что может что-то случиться плохое.
Аноним 02/01/16 Суб 14:29:24 #125 №616981 
>>616980
Что за нах, куда потерялись звёздочки.
Аноним 02/01/16 Суб 14:35:10 #126 №616985 
>>616980
можно, но дизайн хуевый получился
Аноним 02/01/16 Суб 20:41:43 #127 №617249 
>>616980
Если ты возвращаешь s2, то можно не принимать его в качестве аргумента. Конечно же в случае, если s2 полностью выводится из s1 (допустим измененная копия строки). Ты просто можешь вернуть указатель на s2 без выделения памяти для нее в функции main, выделив ее в F(char \*s1).
Аноним 03/01/16 Вск 00:43:48 #128 №617443 
>>617249
У меня из строки s1 копируются несколько символов подряд в s2.
Аноним 03/01/16 Вск 00:49:25 #129 №617448 
>>617443
char \F(char \s1)
{
/ объявляем и выделяем память под s2
/ тут делаем что-то со строкой s2, используя s1, при этом s1 не изменяется /
возвращаем указатель на s2;
}

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

Как-то так.
Аноним 03/01/16 Вск 00:50:16 #130 №617449 
>>617448
Звезда рандомно теряется?
>/объявляем s2
>объявляем указатель на s2
Аноним 03/01/16 Вск 15:45:41 #131 №617717 
Ищу книгу по С, не такую нудную, как K&R, но и не такую объемную, как у Прата. Желательно коротенькую, описывающую актуальные методы с примерами.
Аноним 03/01/16 Вск 16:01:08 #132 №617722 
>>617717
> не такую нудную, как K&R
Да ты охуел, я ее на одном дыхании за 2 выходных прочитал.
Аноним 03/01/16 Вск 20:33:49 #133 №617969 
>>617717
Может тебе еще программу сделать, которая за тебя пишет код и рассказывает охуительные истории?
>Ищу книгу по С, не такую нудную, как K&R
>но и не такую объемную, как у Прата.
Не осилил или слишком скучно, тогда программирование - это явно не твое.
>Желательно коротенькую, описывающую актуальные методы с примерами.
https://learnxinyminutes.com/docs/c/
>>617722
Двачую. Ньюфаги совсем охуели. Я K&R в десятом классе читал и мне было интересно. Особенно задания выполнять.
Аноним 03/01/16 Вск 22:31:39 #134 №618072 
Мне тоже было очень интересно выполнять задания из кнр.

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

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

Может я старею, но меня всё больше тянет на что-то старое доброе, чем на ту парашу, которую остервенело клепают обезумевшие рынки, которым кровь из носу нужно расти каждый год.
Аноним 03/01/16 Вск 22:41:47 #135 №618078 
14518501071880.png
Господа сишники, подскажите, где можно взять книжку, описанную на пикрелейтед? Может, в бумажном варианте есть у кого? Нигде не могу найти.
Аноним 03/01/16 Вск 23:01:36 #136 №618093 
>>618078
Зачем тебе именно эта?
Аноним 03/01/16 Вск 23:08:46 #137 №618103 
>>618093
На неё ссылались некоторые источники, хотелось бы ознакомиться.
Я модифицирую игру для PS1, приходится ковырять экзешники, читая много mips кода. А игры писались на сишечке, хотел упростить себе жизнь.
Аноним 03/01/16 Вск 23:25:49 #138 №618126 
>>618103
Замени её «Архитектурой компьютера» Эндрю Таненбаума.

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

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

Взято из книги «Understanding and Writing Compilers», Richard Bornat.
Аноним 03/01/16 Вск 23:30:39 #139 №618129 
>>618126
А где мне задавать вопросы? Ну, понимаешь, это такая сфера деятельности, где некоторые ответы можно вечность искать. Живого ассемблер треда нет, а самостоятельно понять "какой код на си мог при компиляции привести к ЭТОМУ" я не всегда могу.
Аноним 03/01/16 Вск 23:42:28 #140 №618136 
>>618129
> Живого ассемблер треда нет
Оживи >>600262 (OP) этот.
Аноним 03/01/16 Вск 23:48:35 #141 №618140 
>>618136
Как я его оживлю, если я не могу отвечать, а могу только спрашивать? Вернее, я уже и отвечать могу, но вопросы никто не задаст моего низкого уровня, ибо людей нет в сфере.
Аноним 03/01/16 Вск 23:55:05 #142 №618149 
>>618072
Согласен. Я хоть не профессионал, но на Си, как любителю мне очень нравится писать. Все прозрачно, как напишешь так и будет. Теория заключается в понимании работы железа. Можно написать абсолютно все, что пожелаешь. Радует, что замену сишечке так и не нашли.
>Firefox, при открытии с пустой вкладкой сжирающий 350 мегабайт
У меня съедает примерно 90Мб на старте(это под линем). Что я делаю не так?
>которую остервенело клепают обезумевшие рынки, которым кровь из носу нужно расти каждый год.
Нужны же ИННОВАЦИИ!!! Даже если эти инновации представляют из себя пропиаренную переделку уже давно известной технологии.
Аноним 04/01/16 Пнд 00:07:40 #143 №618162 
>>618149
Во вы два долбоеба. Работобыдло из офисов повывалило, видимо.
Аноним 04/01/16 Пнд 12:49:53 #144 №618414 
>>617249
>>617448
>можешь вернуть указатель на s2 без выделения памяти для нее в функции main, выделив ее в F
Всё-таки мне этот момент непонятен. Если я возвращаю указатель из функции, программа крашится. Там же неизвестно что хранится по адресу, после завершения функции? Получается, нужно объявлять в самой функции как static или что?
Аноним 04/01/16 Пнд 12:56:49 #145 №618422 
>>618414
Ой, нет всё нормально. Крашится, когда функция void, а не char* и в неё же я передавал указатель на строку и выделял там память.
Аноним 04/01/16 Пнд 23:36:19 #146 №618829 
>>618414
>Там же неизвестно что хранится по адресу, после завершения функции?
Известно. Функция возвращает указатель на участок памяти, с которым ты работал. При завершении работы, функция самостоятельно не освобождает память.

>Получается, нужно объявлять в самой функции как static или что?
static необходим только для того, что значение переменной, отмеченной как static, сохранялось до следующего вызова функции. Как просто пример использования static, можно взять подсчет количества вызовов этой самой функции.
Аноним 05/01/16 Втр 00:55:26 #147 №618881 
Поясните за сборку пакетов, допустим HTTP. Я правильно понимаю, что необходимо просто отправлять строку в которой различные поля разделены при помощи \r\n? Или можно как-то иначе это делать? И есть ли готовые библиотеки для работы с протоколами?
Аноним 05/01/16 Втр 01:15:04 #148 №618894 
>>618881
> просто отправлять строку в которой различные поля разделены при помощи \r\n
Да.

> библиотеки
Ну curl же.
Аноним 05/01/16 Втр 03:07:16 #149 №618930 
>>618894
Благодарю.
Аноним 06/01/16 Срд 04:16:09 #150 №619834 
Я тут хотел спросить. Допустим есть у меня набор каких-то неизвестных данных. Мне необходима возможность по-разному их интерпретировать (допустим как int, char, double, struct smth). Как мне это сделать? Допустимо для этого выделить динамически память под void (звезда) или char (звезда) и затем при помощи указателей(int, char, double, struct smth) пройтись по этим данным? Или это будет плохим способом решения?
Аноним 06/01/16 Срд 04:23:35 #151 №619836 
>>619834
С совершенно произвольными данными ничего не сделаешь. Рассказывай подробнее, что сделать надо.
Аноним 06/01/16 Срд 13:24:02 #152 №619969 
>>619834
Используй union.
Аноним 06/01/16 Срд 16:00:46 #153 №620075 
Посоветуйте хороший, годный конпелятор си типа tcc, но не с таким парашным синтаксисом ассемблера.
Аноним 06/01/16 Срд 16:19:22 #154 №620081 
>>619834
Стандарт запрещает любые подобные выебоны (в том числе и >>619969 union). Чтобы все было пиздец как кроссплатформенно, нужно читать побайтово и вручную собирать многобайтовые типы (сдвигами и т. д., что особенно весело для какого-нибудь double).

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

>>620075
Советую взять любой понравившийся ассемблер (nasm, fasm), писать ассемблерный код отдельным модулем (файлом) и потом линковать к основной программе. Когда ты осознаешь, что код на ассемблере можно заменить интринсиками, проще будет его найти и переписать.
Алсо, в tcc дохуя неисправленных багов и напрочь отсутствующий оптимизатор. Единственное, за что его следует любить и уважать, так это за -run.
Аноним 06/01/16 Срд 19:11:01 #155 №620222 
>>620081
> нужно читать побайтово и вручную собирать многобайтовые типы
Это как раз то, что я и имел ввиду.
> то указатели вполне ок,
А это как раз то, что я хотел сделать.
Спасибо за ответ.
Аноним 06/01/16 Срд 20:33:43 #156 №620288 
>>620081
>Алсо, в tcc дохуя неисправленных багов и напрочь отсутствующий оптимизатор. Единственное, за что его следует любить и уважать, так это за -run.
Тогда посоветуй еще какой-нибудь компактный компилятор, который генерировал бы маленькие экзешники. Хеллоуворлд, скомпилированный tcc, весит всего 2.5 кб, почти как на ассемблере. Другие компиляторы даже с оптимизациями меньше 25 кб не генерят.
Аноним 06/01/16 Срд 20:46:00 #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-хуйня? От нее не избавишься.
Аноним 06/01/16 Срд 20:48:45 #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);
}
Аноним 06/01/16 Срд 21:11:07 #159 №620305 
>>620288
tcc просто динамическая линкуется к рантайму. Рантайм в Windows весит 400 КБ (используется древняя MSVCRT.DLL, что само по себе плохо).
Можно взять Pelles C из шапки, с -MD он тоже сгенерит 2 КБ плюс 300 КБ рантайм (если статически линковать рантайм, будет что-то около 30 КБ минимум) . Можно взять Visual C++, он генерирует 4.5 КБ плюс рантайм (со статической линковкой 50 КБ). А можно перестать загоняться по поводу размера файла.
Аноним 06/01/16 Срд 21:21:04 #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 и не еби себе мозг. Хотя лучше, конечно, пиши на масме под венду. Под прыщами на нем не попишешь.
Аноним 06/01/16 Срд 21:22:01 #161 №620317 
Хули у меня все указатели обрезались, я не понял бля? >>620315-кун
Аноним 06/01/16 Срд 21:22:55 #162 №620319 
>>620317
Абу просто жабогосподин. Вот и режет указатели. Ибо нехуй.
Аноним 06/01/16 Срд 21:24:31 #163 №620322 
Почему моя функция strcmp работает неправильно?
https://ideone.com/VWF7Ln
sageАноним 06/01/16 Срд 21:25:51 #164 №620324 
>дос
>MessageBoxA
>16
>пиши на масме под венду
Пиздец, куда я попал?
Аноним 06/01/16 Срд 21:29:09 #165 №620328 
>>620322
int strcmp(char s, char t){
while(s++ == t++)
В цикле while указатели убери. У тебя это итак указатели. Ты просто адрес инкрементируй, а не то, что находится в указателе, киса.
>>620324
Долбоеб. 16 - это кол-во байт передаваемых в MessageBoxA(dword hwnd, dword capture, dword text, dword status(или как там)); дебильный блядь.
А ты думал это под дос, сука, мессадж бокс блядь? Охуеть не встать. Иди блядь мсдн читай, уебок.
Аноним 06/01/16 Срд 21:29:09 #166 №620329 
>>620322
Потому что внутри while и s, и t уже инкрементировались и указывают на следующий символ. Ты, кстати, хуйней какой-то занимаешься, нормальные компиляторы все равно обнаруживают эти паттерны и заменяют на вызовы библиотечных функций (которые быстрее потому что реализованы через sse.)
Аноним 06/01/16 Срд 21:31:36 #167 №620332 
>>620329
Да мне просто интересно писать говно.
Аноним 06/01/16 Срд 21:31:59 #168 №620333 
>>620328
>Иди блядь мсдн читай, уебок.
А оно мне надо?
>кол-во байт передаваемых
>2016
>x86-64
>не передавать аргументы через регистры

>MessageBoxA
>A
Аноним 06/01/16 Срд 21:34:24 #169 №620335 
>>620333
Кто тебе сказал, что через регистры, уебок? А ты не слышал о том, что можно передавать адрес операнда, который находится в переменной? Ты не слышал про макро среду языков ассемблера различных? Не? И если что в таблице экспорта именно так обозначается все. Ебать ты даун, хуево быть тобой. Не надо ему мсдн читать, бля. Охуеть не встать, с какими ебланами я на борде сижу.
Аноним 06/01/16 Срд 21:35:13 #170 №620338 
>>620322
https://ideone.com/YPmvYF
Аноним 06/01/16 Срд 21:37:50 #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, тогда гцц тебе сразу все это укажет.
Аноним 06/01/16 Срд 21:39:23 #172 №620342 
>>620335
>Кто тебе сказал, что через регистры, уебок?
Я и говорю, какой мудак в 2016 на 64-битном хуе86 передает не через них? Шиндовсбляди, видимо.
>А ты не слышал о том, что можно передавать адрес операнда, который находится в переменной?
Это тут вообще при чем?
>Ты не слышал про макро среду языков ассемблера различных?
Ты не слышал про си?
Аноним 06/01/16 Срд 21:42:36 #173 №620344 
>>620341
А, еще i не инициализирована.
Аноним 06/01/16 Срд 21:42:45 #174 №620345 
>>620341
Ты не углядел главное - t[2] - это вне массива.
Аноним 06/01/16 Срд 21:45:00 #175 №620350 
>>620342
> Шиндовсбляди, видимо.
Ты не поверишь, но 64-битный fastcall в шинду завезли точно такой же.
Аноним 06/01/16 Срд 21:47:41 #176 №620352 
>>620350
>64-битный fastcall
Во-первых он называется System V ABI.
Во-вторых в шиндовсе опять свой стандарт. Он, кстати, довольно интересный - первые 4 аргумента передаются через регистры, но 32 байта на стеке под них все равно выделить надо (но не надо заполнять), причем даже если функция принимает меньше 4 аргументов. Остальные аргументы идут над этими 32 байтами.
Аноним 06/01/16 Срд 21:53:40 #177 №620355 
http://pastebin.com/6B9cyKs0 в общем вот он мой сканер портов. Такая вот хуйня. ЧЯДНТ?
Аноним 06/01/16 Срд 21:56:55 #178 №620357 
>>620355
22 - стек разве позволяет взять такой огромный размер.
Дальше лень смотреть. Говнокод я лютый вижу здесь.
мимокрок
Аноним 06/01/16 Срд 21:58:27 #179 №620359 
>>620355
>ЧЯДНТ?
>pthread_t t[0x7fffffff]
http://ideone.com/rQVWum
Дальше не читал, хуйня полная написана.
Аноним 06/01/16 Срд 21:59:44 #180 №620360 
>>620355
> pthread_t t[0x7fffffff];
Всегда так делаю.

> ЧЯДНТ
Не прочитал ничего про многопоточное программирование. Например, у address все шансы затереться раньше, чем поток им воспользуется. И я тебе уже об этом писал в середине треда.
Аноним 06/01/16 Срд 22:05:16 #181 №620362 
>>620359
Всего лишь 4Гб. Тебе жалко что ли? Или компуктер не позволяет?
Аноним 06/01/16 Срд 22:12:03 #182 №620364 
>>620362
Лол, а я и не подумал. Поменял значение, все запустилось, лол.
Аноним 06/01/16 Срд 22:12:29 #183 №620365 
>>620341
>Не проверяешь возвращенный malloc-ом результат на NULL
Боишься, что на твоем калькуляторе не хватит памяти для выделения?
Аноним 06/01/16 Срд 22:14:30 #184 №620368 
>>620365
Про квоты слышал когда-нибудь?
Аноним 06/01/16 Срд 22:14:31 #185 №620369 
>>620364

быстрофикс:правда нихуя не происходит кроме нагрузки проца в 1 поток.
Аноним 06/01/16 Срд 22:14:48 #186 №620371 
>>620365
А если требуется брать много памяти, а система и так загружена? Будто что-то плохое, предусмотреть такую ситуацию. Тем более, она вполне реальна.
Аноним 06/01/16 Срд 22:23:45 #187 №620375 
Возник вопрос, а нужно ли вообще распараллеливание для сканера портов? Разве там не упирается все в сетевуху?
Аноним 06/01/16 Срд 22:23:52 #188 №620376 
>>620371
> предусмотреть такую ситуацию
И свалиться не просто, а успев выругаться в консолечку. Потому что в программе серьезнее хелловорлда выругаться в логи может не получиться, и показать уведомление может не получиться, и даже завершиться красиво может не получиться. Поэтому если программа не сервис, мелкие аллокации проще всего вообще не проверять и в том редком случае, когда память кончится, просто свалиться.
Аноним 06/01/16 Срд 22:25:06 #189 №620377 
>>620375
Спрашивающий - новичок. Он не может в неблокирующие сокеты. И в сырые сокеты тем более не может.
Аноним 06/01/16 Срд 22:25:55 #190 №620378 
>>620376
>Потому что в программе серьезнее хелловорлда выругаться в логи может не получиться, и показать уведомление может не получиться, и даже завершиться красиво может не получиться.
А может и получиться. Гвидон вон вполне нормально бросает MemoryError в таких случаях.
Аноним 06/01/16 Срд 22:28:48 #191 №620379 
>>620378
Да и сваливаться ведь не обязательно. Иногда же бывают случаи, когда невозможность выделения памяти не является критической ошибкой. В таком случае, можно просто залочить возможность на некоторое время или же просто выделить меньше памяти, если это возможно.
Аноним 06/01/16 Срд 22:33:14 #192 №620382 
>>620338
Ну охуеть, должно быть 0
Аноним 06/01/16 Срд 22:35:26 #193 №620384 
>>620382
return s - t;
'y' - 'z' == -1
Где ошибка? Возвращает разницу, когда находит не совпадение.
Аноним 06/01/16 Срд 22:36:57 #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;
Аноним 06/01/16 Срд 22:37:39 #195 №620386 
>>620384
man strcmp
Аноним 06/01/16 Срд 22:41:14 #196 №620390 
>>620385
>>620382
>>620386
Что несешь-то? strcmp это лексикографическое сравнение, а не просто по длине.
Аноним 06/01/16 Срд 22:44:40 #197 №620394 
>>620390
Ну тогда хуй с ним
Аноним 06/01/16 Срд 22:46:49 #198 №620396 
14521096094830.png
>>620386
И что не так? Работает, как и библиотечная.
Аноним 06/01/16 Срд 22:49:30 #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.
Аноним 06/01/16 Срд 22:50:01 #200 №620399 
>>620397
man select
Аноним 06/01/16 Срд 22:52:39 #201 №620402 
>>620396
Сижу, обзавшийся своим же говном. Извините
Аноним 06/01/16 Срд 22:53:22 #202 №620405 
Ебать вы тут насрали.
Аноним 06/01/16 Срд 22:54:16 #203 №620406 
>>620399
И что там нового для меня? Возвращается 1, а данных нет. По таймауту не отваливается.
Аноним 06/01/16 Срд 22:56:39 #204 №620408 
Как правильней писать time(0) или time(NULL)?
Аноним 06/01/16 Срд 22:56:44 #205 №620409 
>>620406
Может быть, тебе FIN приходит просто?
Аноним 06/01/16 Срд 22:57:27 #206 №620410 
>>620408
NULL, подчеркивая, что это должен был быть указатель.
Аноним 06/01/16 Срд 22:59:18 #207 №620412 
>>620410
Открыл страницу в man'e и понял уже. Прошу прощения за столь глупый вопрос.
Аноним 06/01/16 Срд 23:09:40 #208 №620421 
>>620409
FIN: No more data from sender
Типа нет больше данных от отправителя?
Аноним 06/01/16 Срд 23:11:49 #209 №620423 
>>620421
Ты хоть на локалхосте проверяешь?
Аноним 06/01/16 Срд 23:19:34 #210 №620429 
>>620423
Да, а что? Если что это >>620375 не мой пост. Мне от браузера данные надо получить, у меня SSL соединение устанавливается нормально, а заголовок дождаться не получается.
Аноним 06/01/16 Срд 23:23:17 #211 №620432 
>>620429
В древней опере тестирую, всё почти нормально. Хотя бы первый запрос обработать получается, а keep-alive по таймауту завершаю. А с хромом ни в какую. Он пересоздаёт подключение, запрашивает одну страницу, а остальные отваливаются на select с нулём байт и не срабатывает таймаут.
Аноним 06/01/16 Срд 23:37:49 #212 №620450 
Поясните по поводу assert(). Я правильно понимаю, что его стоит использовать только на этапе отладки? То есть оттестил программу, а когда релизишь, то надо ставить #define NDEBUG?
Аноним 06/01/16 Срд 23:51:03 #213 №620467 
В Pellec C размер шрифтов никак не увеличивается? Ебаный вырвиглаз же. Зато компилируется быстро.
Аноним 06/01/16 Срд 23:52:31 #214 №620471 
>>620467
Сам нашел. Обычно шрифт можно было с клавиатуры увеличивать, а тут никак.
Аноним 07/01/16 Чтв 00:47:36 #215 №620513 
>>620341
>Не освобождаешь память.
Если память используется на протяжении всей работы программы, какой смысл её освобождать по завершении программы? Она будет автоматически освобождена операционной системой.
Аноним 07/01/16 Чтв 01:16:52 #216 №620553 
>>620513
>Если память используется на протяжении всей работы программы
Как часто такое бывает? Если маленькое приложение, ладно. Но вообще, всегда рекомендуется это делать явно для обеспечения все той же переносимости. Да и разве сложно сделать это?
Аноним 07/01/16 Чтв 01:23:19 #217 №620557 
>>620421
> нет больше данных
Да, например если удаленный хост закрыл соединение (сделал shutdown(..., SD_SEND)), по TCP уйдет FIN, select на другой стороне прервется, а в сокете будет 0 байтов.
Может быть, у тебя в реализации протокола проблемы, и оно просто не хочет с тобой разговаривать?

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

>>620553
Такое бывает часто, в любой мелкоутилитке. При нормальном выходе рантайм обязан сделать и flush файлам, и закрыть их потом, и память освободить.
Аноним 07/01/16 Чтв 11:36:20 #218 №620747 
>>620377
>сырые сокеты
А они разве нужны для сканера портов? Если я не ошибаюсь, сырые сокеты просто позволяют тебе собрать свой пакет, со своими параметрами, не прибегая к помощи ядра. А для сканера портов не будет достаточно, просто слать TCP и/или UDP пакеты и просто ждать ответа? Или есть нюансы?
Аноним 07/01/16 Чтв 13:28:15 #219 №620781 
>>620747
Существует несколько способов сканирования. Полноценная установка соединения - самый медленный из них.
Аноним 07/01/16 Чтв 13:56:12 #220 №620792 
>>620781
Ладно. Попробую почитать на досуге подробнее о сырых сокетах. Пока мне на голову приходит только: 1) отправить SYN; 2) дождаться SYN/ACK; 3) перейти к следующему порту, не отправляя ACK.
Аноним 07/01/16 Чтв 17:17:16 #221 №620893 
>>620792
Да, именно так. Только желательно на SYN/ACK отвечать RST, чтобы все были счастливы а то мало ли, хост решит, что это у тебя SYN flood такой и обидится. Алсо, у нас тут тредик про сишечку. А про хакеров где-то рядом тонет.
Аноним 07/01/16 Чтв 17:54:20 #222 №620911 
> шланг
> компилятор

Для гомосексуалистов разве что.
Аноним 07/01/16 Чтв 18:39:30 #223 №620936 
>>620911
У штульманавта пригорело?
Аноним 07/01/16 Чтв 20:05:49 #224 №620994 
Может кто дать исходники любого консольного ftp-клиента на Си? Пилю свой велосипед, но очевидно, что я что-то делаю не так.
Аноним 07/01/16 Чтв 20:09:22 #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
Аноним 07/01/16 Чтв 20:29:28 #226 №621018 
>>621005
Спасибо. Собственно, проблема в том, что пока-что программа работает в диалоговом режиме - я ввожу команды протокола, а сервер мне отвечает. Вот тут и появляются проблемы. Или программа виснет на recv() после отправки первой же команды, или при использовании неблокирующего сокета recv() как-то странно данные возвращает, с запаздыванием на пару отправленных команд. Скорее всего, это я накосячил, но как поправить - непонятно.
Аноним 07/01/16 Чтв 20:46:50 #227 №621027 
>>621018
Покажи код, может быть? Попробуй написать простой телнет-клиент для начала и потестить на локалном netcat - сразу увидишь, где и как у тебя что отправляется. Потом этим же телнет-клиентом уже к ftp вручную коннектиться попробуй.
Аноним 07/01/16 Чтв 20:50:42 #228 №621032 
>>621027
Собственно, у меня пока только это и есть (телнет клиент). Код завтра скину, еще помучав.
Аноним 07/01/16 Чтв 20:56:10 #229 №621037 
>>621027
А, и про netcat - спасибо, не знал о таком.
Аноним 07/01/16 Чтв 22:43:09 #230 №621138 
https://ideone.com/VfABvJ
ЧЯДНТ?
Аноним 07/01/16 Чтв 23:26:34 #231 №621173 
>>621138
В си с юникодом традиционно все плохо (до C11).
Конкретно не так ты указываешь format specifier - 'c' - это char, а чтобы был wchar_t, надо '%lc'. Дальше тебе стоит кодировку исходника. Например, в гцц -finput-charset по умолчанию UTF-8, другие компиляторы не будем показывать пальцем могут ожидать какую-то другую.
А если у тебя шиндоус, тебя ждут проблемы в MSVCRT, баги в реализации консоли и прочие радости. В определенный момент ты решишь написать свой велосипед для вывода в консоль под виндой, я гарантирую это.
Аноним 07/01/16 Чтв 23:37:42 #232 №621184 
>>621173
gcc rus_alpha.c -finput-charset=UTF8
Так? Если да, то мне вместо символов выводит знаки вопроса. Кодировка в терминале (xfce4-terminal) также UTF-8.
Аноним 07/01/16 Чтв 23:42:20 #233 №621188 
>>621184
Сделал setlocale(LC_CTYPE, "") и заработало. Это корректный способ?
Аноним 07/01/16 Чтв 23:44:34 #234 №621189 
Как сделать чтобы sleep() принял float со значением 0.5 вместо округленного int
Аноним 07/01/16 Чтв 23:45:36 #235 №621190 
>>621189
usleep()
Принимает микросекунды.
Аноним 07/01/16 Чтв 23:52:10 #236 №621192 
>>621188
https://ideone.com/lPPK4M
С %с всё корректно, лол.
Аноним 07/01/16 Чтв 23:57:06 #237 №621193 
>>621188
Хуй знает. По идее, да. Зачем тебе это вообще? Выводи UTF-8 через printf, это работает и не требует усилий.

>>621192
С '%c' оно берет из аргументов int и преобразовывает к signed char. А если из юникодной кириллицы отбросить старшие биты, ничего похожего на нормальный результат получиться не должно в принципе.
Аноним 08/01/16 Птн 00:04:01 #238 №621197 
>>621193
Через printf не работает.
https://ideone.com/veJvei
Или что-то не так?
Аноним 08/01/16 Птн 00:10:07 #239 №621207 
>>621197
А, ну если тебе с символами работать, то конечно так не получится разве что делать работу %lc вручную, wctomb, все дела. А просто вывод строк работает если терминал UTF-8.

Забей, это был плохой совет.
Аноним 08/01/16 Птн 00:25:51 #240 №621228 
https://ideone.com/VfABvJ
Оу... Оказывается что в юникоде "ё" вне последовательности... Как все сложно то.
Аноним 08/01/16 Птн 00:47:08 #241 №621234 
>>621228
Всё ещё сложнее. "й" и "ё" можно записать двумя способами.
Аноним 08/01/16 Птн 01:06:11 #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/01/16 Птн 14:45:53 #243 №621579 
Не совсем по теме треда, но. В общем, не могу понять, как в winsock узнать, есть ли данные, которые сокет принял и можно их оттуда забирать.
Аноним 08/01/16 Птн 15:05:57 #244 №621588 
Как запомнить про префиксную и постфиксную форму записи? Всё время путаюсь...

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

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

Аноним 08/01/16 Птн 16:50:31 #245 №621690 
>>621579
Чтобы дождаться данных select(0, ..., ..., ..., &timeout);
Если возвращает >= 1, то данные есть. Если ты передавал больше 1 сокета, то используй макрос FD_ISSET. Если только один, то пришли данные на этот сокет. Если < 0, то отвалилось по таймауту или какая-то ошибка.

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

А если ты мне ответишь на вопрос, почему select возвращает 1, а ioctlsocket ноль, буду очень благодарен.
Аноним 08/01/16 Птн 17:02:35 #246 №621709 
>>621588
Сначала инкрементируется, затем сравнится.
Если префиксная форма, то инкрементируется перед операцией, если постфиксная — после выполнения операции над i.
Аноним 08/01/16 Птн 17:06:42 #247 №621713 
>>621588
Что именно у тебя вызывает сложности? Префиксный инкремент/декремент выполняется до обращения к переменной, постфиксный, соответственно, после. В твоём примере произойдёт увеличение i на единицу и сравнение его с len, поэтому ты не обработаешь последний символ. Здесь надо постфиксный. Или местами поменять условие, т.к. у тебя i будет указывать на следующий символ за нужным тебе. Ещё неплохо бы inq изменять каким-то образом в сторону увеличения.

>хочу организовать такой крутой цикл в одну строчку
Оно, конечно, круто while (∗s++ = ∗t++), но, как по мне, лучше избегать таких конструкций.
Аноним 08/01/16 Птн 19:16:22 #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 - код ошибки.
Аноним 08/01/16 Птн 19:59:12 #249 №621813 
А как вычислить сумму ряда на C?
Аноним 08/01/16 Птн 20:00:51 #250 №621814 
>>621813
Сложить.
Аноним 08/01/16 Птн 20:02:52 #251 №621816 
>>621813
int sum = 0;
for (int i = 0; i < N; i++) {
sum += element;
}
И в чем у тебя проблема была?
Аноним 08/01/16 Птн 20:03:33 #252 №621817 
>>621816
>element
фикс
Аноним 08/01/16 Птн 20:03:58 #253 №621818 
>>621817
А... Курсив!
Аноним 08/01/16 Птн 21:14:15 #254 №621852 
>>621777
>Это идиома
Просто привёл пример "крутого цикла в одну строку". Хотя мне всё равно не нравятся такие конструкции.

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

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

Грамотные примеры реализации можешь посоветовать, где посмотреть?
Аноним 08/01/16 Птн 22:17:39 #255 №621876 
Есть ли практической применение рекурсивного вызова main()?
Аноним 08/01/16 Птн 23:09:37 #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/01/16 Суб 00:45:38 #257 №621952 
Не подскажите годной литературы по WinAPI?
Аноним 09/01/16 Суб 00:56:11 #258 №621957 
14522901718980.png
>>621952
Рихтер, потом MSDN. Можно просто MSDN, ее можно прямо по разделам читать.
Аноним 09/01/16 Суб 01:01:19 #259 №621960 
>>621957
Премного благодарен.
Аноним 09/01/16 Суб 01:02:46 #260 №621961 
Здесь стоит задавать вопросы касательно С в реалиях микроконтроллеров? А то в радаче треды полумертвые.
Аноним 09/01/16 Суб 01:03:46 #261 №621962 
>>621961
Если связано с Си, почему бы и нет?
Аноним 09/01/16 Суб 01:18:38 #262 №621968 
>>621962
Разбираю даташит и атмеловские библиотеки, замечаю запись такого вида:
var1 = (uint_8)(var2 >> 8);
или просто:
var1 = (unsigned char)var1;

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

Также есть вопрос по поводу объявления функций, что такое inline разобрался, но почему очень часто функцию объявляют как static inline разобраться не могу.
Аноним 09/01/16 Суб 01:22:15 #263 №621969 
>>621968
Приведение типов же.
Аноним 09/01/16 Суб 01:26:59 #264 №621970 
>>621968
(имя_типа) переменная — это такое явное преобразование типов из одного в другой.
static кажется и в случае с inline ограничивает ее область видимость до файла, в котором она находится. То есть, это функция будет видна только в том файле, в котором она объявлена.
Аноним 09/01/16 Суб 01:27:05 #265 №621971 
>>621968
> но почему очень часто функцию объявляют как static inline разобраться не могу

static здесь говорит, что функцию снаружи вызывать никто не будет. Поэтому в объектный файл она может вообще не скомпилироваться, если компилер ее везде заинлайнит. Если просто inline, то компилер попытается инлайнить функцию везде, где может, но все равно дополнительно в объектник положит копию функции, которую можно вызвать снаружи. А она может и нахуй не нужна.
Аноним 09/01/16 Суб 01:32:05 #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/16 Суб 01:37:17 #267 №621975 
ясно, нужно освежить функциональную вложенность для достаточного понимания работы программы
Аноним 09/01/16 Суб 02:09:47 #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/01/16 Суб 02:43:44 #269 №621996 
Как читать проекты на сишке? С чего начинат? Как определять "main" файл, который может носить произвольное название?
С какого конца раскручивать?
Мб лучше сначала хедеры читать, а потом *.c?

Просто я наткнулся на проект на ncurses, принцип работы которого хотел бы понять. А именно, как "прибит" интерфейс к самому приложению.
Аноним 09/01/16 Суб 02:45:46 #270 №621998 
>>621996
Если unix-подобная ОСь, то найти main очень даже просто.
Аноним 09/01/16 Суб 02:50:19 #271 №621999 
>>621998
Да, точно, я затупил что-то. Не имел дела с сишкой полтора года.
Аноним 09/01/16 Суб 02:58:33 #272 №622003 
>Стандарт ISO/IEC 9899:2011 (он же C11)

теперь можно быстрые веб-сайтики клепать на сишке?
Аноним 09/01/16 Суб 03:00:05 #273 №622004 
>>622003
Ты думаешь, раньше кто-то запрещал? Но вообще, для сайтиков есть более подходящие инструменты.
Аноним 09/01/16 Суб 03:05:32 #274 №622007 
>>622004
>Ты думаешь, раньше кто-то запрещал? Но вообще, для сайтиков есть более подходящие инструменты.
с++?

а реально, есть какие фреймворки или типа того? Занимается этим серьезно?
Аноним 09/01/16 Суб 03:08:56 #275 №622009 
>>622003
А в этом стандарте много нового ввели? Я думал там потоки только завезли. И кажется еще что-то с юникодом связанное.
Аноним 09/01/16 Суб 03:13:51 #276 №622012 
>>622007
Python/PHP/Java конечно На роутерах бэкенд иногда на сишечке, иногда на плюсах. За фреймворки не скажу, всё, что видел - велосипеды.

>>622009
Потоки, чуть лучший юникод, выравнивание в памяти, static_assert, анонимные структуры (как у MS было), _Generic, эксклюзивный доступ к файлам, ну и еще что-то по мелочи.
Аноним 09/01/16 Суб 03:22:33 #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/01/16 Суб 11:23:13 #278 №622068 
>>622007
vibe.d
Аноним 09/01/16 Суб 13:01:56 #279 №622097 
Товарищи, заметил непонятную ересь у себя. Сам я новичок, пишу на сях меньше пары месяцев. Есть код вида
eoucheck = fgetc(DB_table);
while (!feof(DB_table)) {
while (eoucheck != '\n') {
while (eoucheck != '|') {

который не работает. Он и не должен работать, или это я такой аутист?
Аноним 09/01/16 Суб 13:02:22 #280 №622098 
>>622097
табы прикрепились, это не я.
Аноним 09/01/16 Суб 13:12:58 #281 №622101 
>>622098
У тебя eoucheck вне цикла.
Аноним 09/01/16 Суб 13:13:41 #282 №622103 
>>622101
То есть fgetc(). Оно один символ возьмет из потока перед циклом и все.
Аноним 09/01/16 Суб 13:14:56 #283 №622105 
>>622103
Т.е. это должно выглядеть, как while((eoucheck = fgetc(DB_table)) != EOF) <блаблаблаблабоди> или о чем ты?
Аноним 09/01/16 Суб 13:15:48 #284 №622107 
>>622105
Да.
Аноним 09/01/16 Суб 13:17:17 #285 №622109 
>>622097
Дабы внести ясности (хотя, скорее всего, вам и так это ясно), не работает именно переход от строчки на другую строчку по завершению оной.
При том варианте в посте, и >>622105 одинаково не работает именно это.
Аноним 09/01/16 Суб 13:21:09 #286 №622112 
>>622109
У тебя какая-то очень странная конструкция. Зачем здесь циклы для '\n' и '|'? Что ты хочешь сделать вообще?
Аноним 09/01/16 Суб 13:24:13 #287 №622114 
>>622112
Согласен, поэтому и спрашиваю. Окей, рассказываю поподробнее. Есть файлик DB_table с содержимым вида:
S | himpanze
G |orilla
M | akaka
Необходимо пройтись по строчкам и в переменную w1 вписать до |, а в w2 соответственно после. В общем, с этим все ясно. Я пришел к выводу, что можно пройтись по строчкам и до | с помощью fgetc() записать необходимые символы в переменную, и после | соответственно тоже. Код получился таким, каким я указал выше.
Аноним 09/01/16 Суб 13:27:45 #288 №622120 
>>622114
И, забыл указать, важная беда - это rb, а не rt.
Аноним 09/01/16 Суб 13:28:48 #289 №622121 
>>622120
Т.е. в таком случае я должен использовать fread, верно?
Аноним 09/01/16 Суб 13:29:41 #290 №622123 
>>622114
Тебе кажется нужен strtok. С помощью него удобней парсить строки. Считай все из файла и парси.
Аноним 09/01/16 Суб 13:31:31 #291 №622125 
>>622123
Да, я думал о таком. Но как указать максимальный размер строки? Писать условный 1024? А если выйдет так, что строчка равно 1025? Или плевать на них, и сказать, мол, у меня запрещено так делать?
Аноним 09/01/16 Суб 13:33:01 #292 №622127 
>>622125
Создавай динамический массив и изменяй его размеры, когда считанных символов становится больше чем твой буфер.
man malloc
man realloc
Аноним 09/01/16 Суб 13:33:34 #293 №622128 
>>622127
Да, это очевидный вариант, хоть и затратный по памяти. Хорошо, я попробую, спасибо.
Аноним 09/01/16 Суб 13:36:54 #294 №622131 
14523358146670.jpg
>>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("");
}
*
Помоги, задать вопрос больше некому.
Аноним 09/01/16 Суб 13:44:19 #295 №622138 
>>622128
Ну затратный он или нет, зависит от того, как ты будешь увеличивать. Куда затратней, статику большую использовать. Но в твоем случае, это вообще не существенно, так как у тебя больше нескольких кБ вероятно не будет.

>>622131
https://ideone.com/C8gQOy
Сюда код, в котором есть указатели не выкладывай. Здесь звезды съедает.
Аноним 09/01/16 Суб 13:47: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;
}


Вот весь код, который работает. Однако понимания не прибавило лол
Аноним 09/01/16 Суб 13:48:38 #297 №622143 
>>622138
https://ideone.com/dCMYlv
Аноним 09/01/16 Суб 13:54:21 #298 №622152 
>>622141
Я не внимательно прочитал сначала.
https://ideone.com/98CYJE
Расставил комментарии.
Аноним 09/01/16 Суб 14:03:49 #299 №622159 
>>622152
Спасибо, анон. Кажется начинаю вникать. И еще вопрос: где найти задачи на большее усвоение тем указателей и строк?
Аноним 09/01/16 Суб 14:04:50 #300 №622161 
>>622159
Книжки почитай. K&R или Прата. У них и задачи есть.
Аноним 09/01/16 Суб 14:08:07 #301 №622163 
>>622161
Вдогонку, почему мои программы неадекватно работают с кириллицей? Либо толпы вопросов, либо ошибка.
Аноним 09/01/16 Суб 14:11:33 #302 №622165 
>>622163
Поднимался вопрос в треде.
Читай отсюда:
>>621138
Аноним 09/01/16 Суб 14:14:41 #303 №622169 
14523380815520.png
ПОСОНЫ НА СКРИНЕ БЛЯТЬ ПРОБЛЕМА ВЕКА,
ЧО ДЕЛАТЬ НАХУЙ ПИЗДЕЦ СРОЧНО

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

я перегрелся?
и не нашел где плюсотред.
Аноним 09/01/16 Суб 14:15:53 #304 №622171 
>>622169
У тебя БЛОКСАЙЗ не равен нулю случаем?
Аноним 09/01/16 Суб 14:17:13 #305 №622173 
>>622171
нет, const int BLOCKSIZE = 1024;
на скрине, шаг1 высвечивает нормальное значение
Аноним 09/01/16 Суб 14:21:41 #306 №622180 
>>622173
а оффсет 1024м?
Аноним 09/01/16 Суб 14:24:44 #307 №622185 
14523386849450.png
Я ТАК НЕ ИГРАЮ НАХУЙ
чо делать то?
Аноним 09/01/16 Суб 14:27:25 #308 №622187 
>>622180
офсет нулю равен, это не важно
второй скрин смотри
Аноним 09/01/16 Суб 14:36:37 #309 №622191 
>>622185
не, тут все верно вылетает
Аноним 09/01/16 Суб 14:47:49 #310 №622195 
все решил, это я перегрелся.

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

объявлена была в самом конце цикла, то есть после использования.
Аноним 09/01/16 Суб 15:33:13 #311 №622219 
Хм. Это нормально, что для массива структур, состоящей из ~70 указателей на char + несколько массивов char хватает только 75 плюс-минус 1 элемент? Дальше программно тоже нельзя для такой структуры выделять память... Система Debian, сборка с помощью CMake, если что.
Аноним 09/01/16 Суб 15:35:05 #312 №622223 
>>622219
Покажи код структуры. Я лично, не понял что ты имеешь ввиду.
Аноним 09/01/16 Суб 15:39:05 #313 №622228 
>>622223
http://pastebin.com/dEmybkBY

Ну вот. Потом идёт
Record Table[RNUM];
Где RNUM - количество читаемых строк из некоего файла, это число нельзя поставить больше 75. Может, нужно выделять память через malloc?
Аноним 09/01/16 Суб 17:45:51 #314 №622303 
Как преобразовать id потока в int? На строчку:"int a = (uint64_t) phil4.get_id;" жалуется компилятор
Аноним 09/01/16 Суб 18:25:31 #315 №622335 
>>622303
Не уверен, что тебе нужно, но попробуй int a = @(uint64_t@)&phil4.get_id; где @ - *
Аноним 09/01/16 Суб 19:11:23 #316 №622367 
>>622303
uint64_t на int замени.
>>622335
Тогда уж int a = ∗(int∗)(uint64_t∗)&phil4.get_id;
Аноним 09/01/16 Суб 19:48:34 #317 №622392 
>>622303
Мне показалось, или ты ошибся тредом? У нас тут няшная сишечка, а не плюсы. Алсо, get_id - метод, почему ты его не вызываешь?

>>622367
Никогда больше так не делай. К тому же, подобный двойной каст указателя - абсолютно бессмысленная вещь.
Аноним 09/01/16 Суб 20:54:20 #318 №622452 
Почему IDE Pelles C часто выдает ошибку "Отказано в доступе", которая лечится только перезапуском IDE? Заебывает.
Аноним 09/01/16 Суб 21:08:26 #319 №622471 
>>622452
google://ide pelles c access violation
Аноним 10/01/16 Вск 01:30:18 #320 №622650 
>>622471
В гугле пиздят, #pragma optimize(none) не помогает от этой ошибки.
Аноним 10/01/16 Вск 01:32:48 #321 №622652 
>>622471
Вообще там обо всем пиздят. Отключение оптимизации в настройках не помогает.
http://forum.pellesc.de/index.php?topic=2862.15
Аноним 10/01/16 Вск 02:30:11 #322 №622665 
>>622652
Давай больше технической инфы. Адрес ошибки, код исключения, имя модуля, какая винда?
Аноним 10/01/16 Вск 08:32:29 #323 №622789 
14524039492650.jpg
Я снова тут. Теперь туплю при написании программы по задаче. АВТОБУС ОШИБКА
ЧЯДНТ?
https://ideone.com/ICuvSY
>>622131
Аноним 10/01/16 Вск 08:38:09 #324 №622791 
>>622789
Если дебаггер не завезли, хотя бы с помощью printf("1");fflush(stdout); ошибку локализуй.
Аноним 10/01/16 Вск 08:39:35 #325 №622793 
>>622789
https://ideone.com/xixkIN
У тебя ошибка на ошибки, ошибка через ошибку...

Аноним 10/01/16 Вск 08:41:37 #326 №622794 
14524044973690.jpg
>>622793
Да что же это такое... Буду перепиливать. Спасибо
Аноним 10/01/16 Вск 08:43:57 #327 №622795 
>>622793
>Бред. Ты сравниваешь адрес с числом
Арифметические операции с указателями разве не так реализуются?
Аноним 10/01/16 Вск 08:56:10 #328 №622796 
>>622795
Адрес имеет значение вида 0x0c4233dd. Число, которое сравнивается с указателем в том цикле является длинной строки. Сам подумай, есть ли в этом смысл.
Аноним 10/01/16 Вск 08:59:34 #329 №622797 
>>622796
Уточнение:
Было бы правильно, если бы сравнивался указатель на начало строки с указателем на начало строки + длинна строки. Тогда было бы нормально.
Аноним 10/01/16 Вск 09:02:33 #330 №622799 
>>622797
Но как тогда "передвинуть" указатель первого символа строки на Nый символ оной? Видимо я недопонял саму концепцию операций над указателями, лол
Аноним 10/01/16 Вск 09:10:01 #331 №622802 
>>622799
Ты передал первый элемент массива через аргумент. Создай в той же функции указатель, который будет указывать на то, что ты передал (начало строки), Это для того, чтобы не потерять саму строку. Затем, ты можешь делать со строкой все что угодно. Для того чтобы передвинуть указатель, тебе нужно добавить целое число. Допустим есть у тебя указатель на char. Прибавляя единицу, ты сдвинешься на один байт. Если указатель будет на double, добавив единицу, ты сдвинешься на 8 байт, так как double = 8 байтам. Естественно, размеры char, int , double - не фиксированы и зависят от платформы. Но я взял к примеру amd64.
Аноним 10/01/16 Вск 09:12:08 #332 №622803 
>>622802
Спасибо за объяснения Вчера ли не ты мне помог?, приму к сведению, пойду перечитывать главу с указателями.
Аноним 10/01/16 Вск 09:15:52 #333 №622804 
>>622803
Да. Перечитай и попрактикуйся. Указатели лишь поначалу кажутся сложными и непонятными, но если приловчится, начинаешь без проблем работать даже с самыми сложными конструкциями.
Ага. Если ты про книги, юникод и комментарии.
Аноним 10/01/16 Вск 12:28:59 #334 №622861 
>>622802
>char, int , double - не фиксированы и зависят от платформы
nope, char везде 1 байт
Аноним 10/01/16 Вск 12:33:25 #335 №622865 
>>622861
будь чар 1 байт, то тогда не придумывали бы uint8_t
Аноним 10/01/16 Вск 13:06:20 #336 №622876 
>>622865
http://stackoverflow.com/questions/437470/type-to-use-to-represent-a-byte-in-ansi-c89-90-c/437640#437640
Аноним 10/01/16 Вск 13:27:33 #337 №622891 
>>622876
>>622865
>>622861
Да какая разница. Будто кто-нибудь здесь пишет под очень редкие и необычные платформы.
Аноним 10/01/16 Вск 19:22:37 #338 №623079 
как понять формальные и фактические параметры?
Аноним 10/01/16 Вск 19:25:04 #339 №623081 
>>623079
Формальные — это тот, который ты задаешь при определении функции. Фактический — тот который используется при вызове.
Аноним 10/01/16 Вск 19:32:47 #340 №623088 
>>623081
типа int huy (int govno) - huy это формальный, govno - фактически - правильно поняЛ?

Аноним 10/01/16 Вск 19:37:20 #341 №623090 
>>623088
Нет. Возьмем этот https://ideone.com/xixkIN пример (не обращай внимание, что код в не абсолютно не правильный).
Здесь на строке 17 и 33 у нас определения функций. Аргументы, которые они принимают — формальные. То есть на не обязательно, передавать аргументы с теми именами, которые указаны. Главное чтобы тип совпадал.
А вот вызовы этих функций, на строке 39 и 49 — принимают фактические аргументы.
Аноним 10/01/16 Вск 19:43:56 #342 №623095 
>>623090
А, ясно короче, блин. Лол. а так описано ФОРМАЛЬНЫЕ ФАКТИЧЕСКИЕ, лол, я думал там сложно А это оказывается принимаемые параметры и объявляемые в фцункции, спасибо.

Короче
где-то в программе int huy_pizda;


int huy (int govno)//формальный
{..}

huy(huy_pizda) - фактически
Аноним 10/01/16 Вск 19:46:00 #343 №623097 
>>623090
Забыл сказать - спасибо.
Аноним 10/01/16 Вск 19:47:04 #344 №623099 
>>623095
Небольшое уточнение.Это параметры объявляемой и вызываемой функции.
>int huy (int govno)//формальный {..}
Здесь именно int govno - формальный параметр
>huy(huy_pizda) - фактически
huy_pizda - фактический параметр.
Аноним 10/01/16 Вск 20:13:14 #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){
perror("Out of memory");
system("pause");
exit (-1);
}
Аноним 10/01/16 Вск 20:15:37 #346 №623124 
>>623118
Ну блин. Всё время забываю про звёзды.
http://pastebin.com/LYnKn6HK
Аноним 10/01/16 Вск 20:24:02 #347 №623132 
>>623124
BUF_SIZE покажи как определен.
Аноним 10/01/16 Вск 20:26:14 #348 №623135 
>>623132
через #define

Но вот щас интересная магия происходит: убираю отладочный printf - программа крашится...
Аноним 10/01/16 Вск 20:27:08 #349 №623137 
>>623132
0x7fffffff
Аноним 10/01/16 Вск 20:33:52 #350 №623144 
>>623137
А тебе двух гигов не многовато будет?
Аноним 10/01/16 Вск 20:43:46 #351 №623155 
>>623144
А я по твоему должен думать о нищебродах, у которых меньше 8Гб ОЗУ?
Да я не он. Просто вспомнил многопоточный сканер портов, который был сотней постами ранее.
Аноним 10/01/16 Вск 20:46:39 #352 №623158 
Что скажите о GTK? Он где то применяется кроме open source проектов?
Аноним 10/01/16 Вск 20:53:21 #353 №623166 
>>623155
Видел коммерческий русский софт на PyGTK.
Аноним 10/01/16 Вск 21:01:04 #354 №623172 
>>623135
Ты всю функцию покажи.
Аноним 10/01/16 Вск 21:05:15 #355 №623177 
>>623172
http://pastebin.com/VWib8xT7
Аноним 10/01/16 Вск 21:13:27 #356 №623184 
>>623177
> memset(buf,0,sizeof(buf));
http://www.viva64.com/ru/b/0360/

Покажи дефайн с BUF_SIZE. Или проблема в нём, или ты кучу распидорашиваешь где-то в другой части программы.
Аноним 10/01/16 Вск 21:17:19 #357 №623188 
>>623184
Хм. Возможно, стоит отказаться от использования этой функции.
Дефайн вот:
#define BUF_SIZE 500
Если поставить, к примеру, 1000, то программа не выдерживает.
Пробовал объявить и глобальную
size_t BUF_SIZE=1000;
Проблема та же.
Аноним 10/01/16 Вск 21:21:08 #358 №623195 
>>623188
А у тебя точно считывается не больше BUF_SIZE - 1 байт?
Аноним 10/01/16 Вск 21:21:34 #359 №623197 
>>623188
Не надо отказываться, надо после malloc кормить в memset то, что кормил в malloc, а не sizeof указателя. А вообще, у нас calloc есть.

Аноним 10/01/16 Вск 21:24:49 #360 №623200 
>>623195
Точно. Самая большая строка - первая, в ней 460 символов всего.
Аноним 10/01/16 Вск 21:27:56 #361 №623204 
>>623197
Ок, тогда буду юзать calloc.
Аноним 10/01/16 Вск 21:30:46 #362 №623205 
>>623197
Не нужен ему memset, он всё равно буфер заполняет из файла.
>>623200
Не поленился и проверил твою функцию. Как и ожидалось, всё нормально выполняется. Ошибка не в ней.
Аноним 10/01/16 Вск 21:32:23 #363 №623207 
>>623205
Спасибо. А через что проверял? Я и через Qt и через Dev-C++ запускал.
Аноним 10/01/16 Вск 21:34:18 #364 №623211 
>>623205
Я проверял первое, что он выложил. Тоже работает.

>>623204
Разницы не будет.
И вообще. В чем проблема взять отладчик? Отладка при помощи принтов не самый оптимальный способ.
Аноним 10/01/16 Вск 21:36:09 #365 №623212 
14524509697090.png
>>623207
Через конпелятор VS2005.
Аноним 10/01/16 Вск 21:38:19 #366 №623214 
>>623212
Ты там браузер пишешь?
Аноним 10/01/16 Вск 21:39:31 #367 №623215 
>>623212
А, тогда норм.
QtCreator ещё почему-то не завершает программу, которая запустилась нормально и завершилась нормально, и если не убить её вручную, то следующий запуск будет с фейлом.
Аноним 10/01/16 Вск 21:39:53 #368 №623216 
>>623212
А вкладки замазать забыл, ананимас блин.
>>623214
Нет, кэширующий https-прокси. Это как mitm-прокси, только кэширующий.
Аноним 10/01/16 Вск 21:41:14 #369 №623217 
>>623216
https://msdn.microsoft.com/en-us/library/974tc9t1.aspx посмотри там в конце, как включить отладку кучи (не помню, можно ли где-то галочкой поставить).
Аноним 10/01/16 Вск 21:47:22 #370 №623223 
Как в Си сделать ассемблерную вставку?
Аноним 10/01/16 Вск 21:48:21 #371 №623226 
>>623223
asm{

}
Аноним 10/01/16 Вск 23:02:11 #372 №623266 
>>623264
>>623265

помогите совладать нубу с лабой плз :(
Аноним 11/01/16 Пнд 00:18:21 #373 №623299 
>>623266
Не совсем понятно, зачем там add esi,24 и прочие shr до dec. В остальном все ок же. Я бы сделал fldz и цикл из нужного количества fadd. Как-нибудь так: http://pastebin.com/LUPasL1Z
Аноним 11/01/16 Пнд 00:40:30 #374 №623309 
14524620306560.png
Я не могу понять чистый си, вот почему он отказывается выводить матрицу и выдает

for (int i=0; i<5; i++) {

for (int j=0; j<5; j++) {
printf("%d\t", kk[j] );
printf("\n");
}
}

Какой у меня дабл, наркоманы
Аноним 11/01/16 Пнд 00:43:13 #375 №623310 
>>623309
блядь половину знаков сьела вакаба
printf("%d\t", kk[j]);
конечно же
Аноним 11/01/16 Пнд 00:44:18 #376 №623311 
>>623309
>printf("%d\t", kk[j] );
>printf("%lf\t", kk[j] );
Для float - %а, для double - %lf.
Аноним 11/01/16 Пнд 00:44:44 #377 №623312 
>>623311
>Для float - %а
>Для float - %f
фикс
Аноним 11/01/16 Пнд 00:49:20 #378 №623313 
>>623309
Покажи как kk[][] объявлял.
Аноним 11/01/16 Пнд 16:45:53 #379 №623359 
программач, вот я, допустим, угорел по С и подучив немного теорию захотел реализовать свои новоприобритенные навыки - стоит лезть на гитхаб в относительно простые проекты со своими предложениями? свои велосипеды писать не хочется тк быстро надоедает написание программ бесцельно, а тут какая-никакая польза вред для сообщества. Или есть места более для этого подходящие? Или вообще стоит порешать задачи университетские (методички и прочее)?
Аноним 11/01/16 Пнд 17:00:45 #380 №623366 
>>623359
Стоит лезть с пулл-реквестами, но постарайся делать это не так:
https://lkml.org/lkml/2015/11/19/466
Аноним 11/01/16 Пнд 17:07:33 #381 №623372 
>>623366
А есть другие площадки, где, например, низкий порог вхождения?
Аноним 11/01/16 Пнд 17:43:17 #382 №623386 
В чём подводные камни использования fclose ?
Аноним 11/01/16 Пнд 18:48:56 #383 №623428 
>>623386
Чего-о-о? Нет никаких камней, обязательно используй.
Аноним 11/01/16 Пнд 18:50:24 #384 №623433 
>>623372
Гитхаб норм же. Можешь какого-нибудь инди-разработчика найти с проектом, который тебе интересен - и он будет рад внезапным помощникам, и тебе опыт.
problem Аноним 12/01/16 Втр 23:12:05 #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 компилируются нормально.
Аноним 13/01/16 Срд 11:12:49 #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/01/16 Чтв 05:34:23 #387 №625237 
>>623386
Например вот: только после fclose в успешную, ты имеешь гарантию что данные записались на диск - иначе нет.
Аноним 14/01/16 Чтв 05:38:57 #388 №625239 
>>623223
В с нет такого понятия как ассемблерные вставки. Такое понятие есть на уровне компиляторов - у каждого свои.
Аноним 14/01/16 Чтв 05:46:22 #389 №625241 
>>625237
Во-первых, это всего лишь потому, что fclose делает fflush, а во-вторых, ОС может с тобой не согласиться, а накопитель тем более может не согласиться.
Аноним 14/01/16 Чтв 05:57:07 #390 №625242 
>>625241
> например, узнать что такое стан
> ОС может
А вот и олени подкатили. Ты действительно еблан?
Аноним 14/01/16 Чтв 05:58:47 #391 №625243 
Ну какой может, да лишь потому. Есть описание - по нему и нужно думать. А как там внутри - сёдня так, завтра сяк - и только линус будет возникать в защиту говнокодеров.
Аноним 14/01/16 Чтв 06:03:18 #392 №625244 
Есть вменяемые библиотеки для работы с текстом?
Аноним 14/01/16 Чтв 06:07:28 #393 №625245 
>>625244
> для работы с текстом
Давно хочу знаит, а что это значит? Нужно соединять строчки красиво?
Аноним 14/01/16 Чтв 06:09:36 #394 №625246 
Или там парсить с регулярными выражениями?
Аноним 14/01/16 Чтв 06:10:00 #395 №625247 
>>625245
Ну всякие part of speech tagger (проставлялка частей речи, допустим в английском), какие-нибудь библиотеки для автоматизации рутинной ебли с указателями на массив символов.
Регекспы устраивают, но не совсем. Да и медленновато ими.
Аноним 14/01/16 Чтв 06:12:58 #396 №625248 
>>625247
Ну это уже совсем новый уровень не слышал про такое никогда лол, вряд-ли это к "программированию" прям вопрос, хотя я и других библиотек не знаю, более приземлённых.
Аноним 14/01/16 Чтв 06:16:57 #397 №625249 
Можно попробовать погуглить "C библиотека распознавания частей предложений" Забавно, если добавить в запрос "C" то часто по теме ищет... Хотя 1 символ то. - но наверно ты это сделал уже, и спросил за опыт пользования.
Аноним 14/01/16 Чтв 06:42:22 #398 №625255 
>>625249
Ну да. Хочется чего-то такого.
https://stackoverflow.com/questions/21871374/is-there-any-part-of-speech-tagger-in-c
Аноним 14/01/16 Чтв 06:43:45 #399 №625256 
>>625255
https://stackoverflow.com/questions/1805099/c-c-nlp-library
Даже что-то нагуглил, есть тут кто с опытом использования?
Аноним 14/01/16 Чтв 16:12:47 #400 №625475 
Посоветуйте годной литературы по работе с потоками.
Аноним 15/01/16 Птн 01:44:01 #401 №625885 
>>625475
Ну как бы это сказать, треды ты же про них?, сильно платформо-зависимы. Например, под линь можно почитать боровского - коротенькие статейки с примерами.
Аноним 15/01/16 Птн 02:40:18 #402 №625910 
>>613506
>size_t на unsigned int
Лол, вы тут все такие ебанутые?
Аноним 15/01/16 Птн 02:44:20 #403 №625912 
>>613522
>так и больше размера size_t
Карнавал продолжается. Хотя с числовыми эквивалентами указателей дикий наёб (вспомнить хоть ptrdiff_t к тому), тут только строго c99 (со своими модными intptr_t и uintptr_t) иначе не как .
Аноним 15/01/16 Птн 03:01:47 #404 №625918 
>>619834
В чём проблема то? Бери да кастуй, не нравится - определяй юнион, если там есть массивы переменной длины - объявляй структуру прям внутри функции, где укажешь какой размер массивов в данный момент. А вообще, я не понял что хочешь ты.
Аноним 15/01/16 Птн 03:05:21 #405 №625921 
>>620081
>Стандарт запрещает
Стандарт определяет тебе за щеку. Какая хуйня разница на порядок байт, если это не внешние данные, например Или с чего ты взял что это не так?
Аноним 15/01/16 Птн 03:08:58 #406 №625923 
Ой всё, не могу больше читать вас.
Аноним 15/01/16 Птн 04:52:18 #407 №625931 
>>625923
да, пиздуй отсюда, хуесос
Аноним 15/01/16 Птн 14:42:14 #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/01/16 Птн 18:15:39 #409 №626263 
Есть два массива c[j ... q-1] и a[k ... p + q - 1]. Как скопировать c в a проще всего? Есть какая-нибудь функция?
Индексы могут быть любыми, т.е. мы отрезок одного массива копируем в отрезок другого массива.
Аноним 15/01/16 Птн 18:39:24 #410 №626278 
>>626263
Очевидные memcpy/memmove.
Аноним 15/01/16 Птн 18:44:47 #411 №626286 
>>626278
Я уже погуглил memcpy. Как его правильно использовать, если массив C создан на куче? Есть указатель на его начало. Как с его помощью копировать диапазон элементов из данного массива в другой?
Аноним 15/01/16 Птн 19:24:29 #412 №626314 
>>626286
Считаешь, сколько тебе элементов нужно скопировать. Копируешь:
memcpy(&dest_array[dest_index], &source_array[source_index], sizeof(source_array[0]) ∗ num_elemets);
Где созданы массивы, значения не имеет. Разве что, если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove.
Выражение &array[index] можно заменить на array + index, это вопрос личных предпочтений. Я считаю, что с & и индексом нагляднее.
Аноним 15/01/16 Птн 23:14:03 #413 №626407 
14528888431740.png
14528888431771.png
>>626314
Я вот что пишу. Видимо, я неправильно использую memset, потому что даже спижженное откуда-то копирование при помощи двух циклов дает мне некоторое подобие отсортированного списка. У меня же получается просто мусор.

Как можно исправить алгоритм?

https://ideone.com/b5Slww

У меня все компилируется и запускается. Про free я забыл, но сейчас допишу.
Аноним 15/01/16 Птн 23:16:12 #414 №626408 
>>626407
Блджад, а при добавлении free вне if'а или внутри программа падает при запуске.
Аноним 15/01/16 Птн 23:22:00 #415 №626410 
>>626407
Еще одну ошибку увидел: при выделении памяти не домножаю на размер типа данных.
Аноним 15/01/16 Птн 23:23:22 #416 №626412 
>>626407
Лел, исправил эту ошибку, и сразу заработало. Тогда просто подскажите, как из этого говна сделать хороший код. Что я делаю не так?
Аноним 16/01/16 Суб 00:56:30 #417 №626449 
>>626407
Вот моя окончательная реализация, господа. https://ideone.com/quzyJ8
В процедуре mergesort выделяется память для двух массивов даже когда не выполняется условие n > 1, то есть будет утечка памяти. Как это исправить? Можно освобождать память внутри mergesort, но ведь логичнее это делать после слияния, когда массивы стали больше не нужны.
Аноним 16/01/16 Суб 01:46:15 #418 №626473 
>>626449
Например free перенести из merge в mergesort?
Аноним 16/01/16 Суб 08:09:24 #419 №626554 
>>626314
>Разве что, если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove
Против линуса попереть решил? Не стыдно?
Аноним 16/01/16 Суб 10:37:19 #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]
Аноним 16/01/16 Суб 15:46:14 #421 №626793 
>>626585
нуфаг не вкурсе за memcpy срач
Аноним 16/01/16 Суб 18:22:59 #422 №626937 
Анон поможи.
[code]
printing_str = int_data % 10 + '0';
[/code]
Каким образом это работает? Остаток от деления int на int будет int и к нему прибавляют char '0'. Ничего не понятно. Тут какое-то хитрое преобразования типов?
Аноним 16/01/16 Суб 19:22:12 #423 №626963 
>>626937
char - беззнаковый целочисленный 1-байтный тип данных. То есть [0; 255]. В стандартной кодировке числа идут по порядку, поэтому можно из '0' сделать '1', прибавив единицу. Или из 'a' сделать 'b'.
Аноним 16/01/16 Суб 20:40:30 #424 №627019 
>>626793
Ну так просвети, ёбана. Я могу также сказать, что ты не читал мануал к функции memcpy().
Аноним 17/01/16 Вск 00:09:58 #425 №627170 
>>626937
Про типы данных в выражениях тебе нужно знать одно: если они меньше чем int они неявно кастуються в int, если больше, например безнаковый int, то кастуются в большое, понятно, по приоритетам операций. Всё, например, просто.
Аноним 17/01/16 Вск 00:10:19 #426 №627171 
>>627019
Да я чист лах, забей)
Аноним 17/01/16 Вск 00:12:22 #427 №627172 
>>626963
>char - беззнаковый целочисленный 1-байтный тип данных. То есть [0; 255].
Блять, вы же тралите так? Как вас земля носит. Знаковость он определил, ещё и диапазон вместимости чара, ну ахуеть.
Аноним 17/01/16 Вск 00:13:23 #428 №627174 
>>627019
Он про https://sourceware.org/bugzilla/show_bug.cgi?id=12518
Аноним 17/01/16 Вск 00:24:37 #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/01/16 Вск 00:29:16 #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/01/16 Вск 00:30:07 #431 №627184 
Всё засрал, теперь можно и уходить, не благодарите.
Аноним 17/01/16 Вск 04:00:06 #432 №627278 
>>627174
Энивей, не понятно, почему против Линуса, если он по ссылке пиздит про то что надо memmove() юзать.
>>627171
Хотя это многое объясняет.
Аноним 17/01/16 Вск 04:18:56 #433 №627280 
>>627278
> если он по ссылке пиздит про то что надо memmove
> Хотя это многое объясняет
жопой читал, но ему много объясняет - так и запишем.
Аноним 17/01/16 Вск 12:54:42 #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.
Аноним 17/01/16 Вск 13:16:23 #435 №627432 
Я тут хотел задать вопрос по поводу буфера. Правильно ли я делаю:
1) Задаю начальный размер буфера;
2) Выделяю память при помощи malloc;
3) Делаю цикл для считывания введенных символов с клавиатуры до тех пор, пока символом не станет '\n';
4) В цикле есть счетчик, с помощью которого узнаю, не превышаю ли размера буфера;
5) В случае, если запись текущего символа превысит размер буфера будет превышен, удваиваю размер буфера при помощи realloc;
6) После цикла, выставляю '\0' в качестве значения для последнего элемента строки;
7) Если буфер заполнен не полностью, усекаю размер буфера до размера строки при помощи realloc.
Все правильно делаю? Или можно как-то иначе и лучше сделать это?
Аноним 17/01/16 Вск 15:31:49 #436 №627508 
>>627423
Ты внатуре ебанько, он пишет за баг в либс, хотя его там нет, заебись так сделать memcpy как memmove. Короче о чём с тобой говорить....
Аноним 17/01/16 Вск 15:38:21 #437 №627515 
>>627432
> В случае, если запись текущего символа превысит размер буфера будет превышен,
посылаю нахуй пользователя, потому что 1кб на строчку должно хватать.

> realloc
Не пользуйся этим говном. Память не нужно реалацировать, память нужно выделять и связывать.
Аноним 17/01/16 Вск 15:44:20 #438 №627522 
>>627515
>посылаю нахуй пользователя, потому что 1кб на строчку должно хватать.
>память нужно выделять и связывать.
А если вместо пользователя файл? 1KB не хватит. А заранее выделить необходимое количество не выйдет.

>Не пользуйся этим говном.
А вот здесь по-подробней. Что не так с этой функцией?
Аноним 17/01/16 Вск 16:43:18 #439 №627579 
>>627522
> А если вместо пользователя файл
И что, там будут строки больше 1кб? Вот ты прочитал строку, дальше ты с ней что делаешь?

> Что не так с этой функцией?
Всё так, я просто боевой школьник, и иметь кучу вызовов алока/реалока - странно, суть всегда в том, чтобы сразу выделить много и этим пользоваться. Усекать уж точно не нужно, как и давать возможность пользователи запросить бесконечно много памяти.
Аноним 17/01/16 Вск 19:41:23 #440 №627677 
14530488833260.jpg
14530488833261.jpg
Поясните, почему при вводе кириллицы он показывает 4-байтный хекс, но 1-байтный sizeof?
Аноним 17/01/16 Вск 20:01:54 #441 №627686 
>>627677
Потому что ты дебил и не понимаешь смысла оператора sizeof.
Аноним 17/01/16 Вск 20:07:42 #442 №627691 
Язык с++ Одну из ниже перечисленных ПРОШУ, ПОМОГИТЕ. ЗАВТРА ВЫЕБУТ
1. Программа, подсчитывающая, в какой день недели родились. Входные данные - дата рождения.
2. Программа, считающая количество полных дней с даты рождения. Входные данные - дата рождения и текущая дата.
3. Программа, определяющая, високосный ли год. Входные данные - год.
Аноним 17/01/16 Вск 20:07:54 #443 №627692 
>>627686
Нет, это ты даун, раз сразу не понял, в чем здесь проблема.
Это тупое переполнение char, надо делать unsigned.
Аноним 17/01/16 Вск 20:32:52 #444 №627713 
>>627691
Это не С++ тред. Но кажется, эти задания я видел у старины Бьерна. Там в главе про классы кажись.
Аноним 17/01/16 Вск 20:47:04 #445 №627719 
>>627677
Просто char в функциях с переменным числом аргументов автоматически преобразуется к int. Спецификатор %x предназначен как раз для вывода int, и этот самый int он и выводит. Но размер типа char от этого, конечно же, не меняется, поэтому второй спецификатор выводит 1.
Аноним 17/01/16 Вск 21:10:25 #446 №627731 
>>627719
>int
Собственно говоря потому, что при вызове функции в С, на стек аргументы так и кладутся, интами, ну, кратно.
Аноним 17/01/16 Вск 21:48:43 #447 №627752 
>>627731
Если функция принимает char (есть формальный параметр), то на x86 компилятор может сделать push eax, не обнуляя старшие биты eax. Если функция с переменным числом аргументов, компилятор обязан будет сначала сделать movsx.
Аноним 17/01/16 Вск 21:57:06 #448 №627759 
>>627508
Он пишет про workaround для решения проблем, вызванных некорректным использованием memcpy() разработчиками софта.
>заебись так сделать memcpy как memmove
По факту там хуйнули патч для x86 архитектуры, что заместо memcpy() вызывался memmove(), т.к. он работает нормально с overlapped буферами. Каким макаром замечание, что
>если диапазоны хотя бы частично перекрывают друг друга, нужно использовать memmove
противоречит Линусу, я не понимаю. Хотя о чём с тобой говорить.............
Аноним 17/01/16 Вск 22:35:06 #449 №627787 
>>627759
Проиворечит линусу то, что он допускает неправильное использование memcpy, при перекрывающихся (и пошёл хуярить именно на либу), а ты предлагаешь человеку делать "как надо" - но ты нихуя не улавливаешь ни связи, не смысла - уёбок, что с тобой сделать................................
Аноним 17/01/16 Вск 22:55:32 #450 №627800 
>>627787
>>627759
Вы уже надоели! Читаю вас и не могу понять, о чем вы спорите. Какие-то последователи Линуса или что-то еще. Просто объясните мне. Читаю я значит в мане, что рекомендуется использовать вместо memcpy, memmove в случае, если одна область (в которую копируем) накладывается на другую. Что не так?
Аноним 17/01/16 Вск 23:17:52 #451 №627821 
Не напомните, GTK3 имеет обратную совместимость с GTK2. Или они все сломали? Просто думаю вкатиться по этому протухшему мануалу https://developer.gnome.org/gtk-tutorial/2.90/ , так как других не вижу.
Аноним 17/01/16 Вск 23:23:08 #452 №627829 
>>627821
>думаю вкатиться
>GTK
Бросай эту протухшую затею.
Аноним 17/01/16 Вск 23:28:40 #453 №627835 
>>627829
Но почему? Что в нем плохого?
Аноним 17/01/16 Вск 23:34:42 #454 №627841 
>>627835
Он умирает
Аноним 17/01/16 Вск 23:41:59 #455 №627850 
>>627800
Тоже не могу понять, о чем спор. То, что в каких-то линуксах реализация memmove практически идентична по быстродействию memcpy, не означает, что так будет в других реализациях на других платформах. Поэтому правила остаются теми же:
1) memmove, если области перекрываются или есть сомнения.
2) memcpy в остальных случаях.
Аноним 17/01/16 Вск 23:42:28 #456 №627851 
>>627841
Понятно. Очередной Qt фанатик. А я надеялся ты аргументируешь как-то. На линуксах оно живее всех живых ведь. GNOME 3 хоть и утратил популярность, но держится на плаву. А крыса и вовсе сейчас процветает (вероятно скоро самой популярной станет), так как у нее многие пользователи — это беженцы с тех же KDE и GNOME, в которых от релиза к релизу все ломают. Также есть множество людей, которые предпочитают чистый Си, а не кресты (я не из таких). Впрочем, это уже тема для срача.
Аноним 17/01/16 Вск 23:44:13 #457 №627852 
>>627851
Я не фанатик, я просто реалист. Когда даже такие крупные проекты как, например, Wireshark валят с гтк (или скорее валят на qt), это о чем-то говорит.
Аноним 17/01/16 Вск 23:56:17 #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/01/16 Пнд 00:47:47 #459 №627880 
>>627800
>>627850
Аноним 18/01/16 Пнд 00:48:49 #460 №627883 
>>627880
Внимание не обращайте, делайте как написано в мане, а не как васяны-хакеры могут, и не будет такой хуйни по итогу.
Аноним 18/01/16 Пнд 10:10:18 #461 №628002 
>>627851
>GTK
>чистый C
насмешил
Аноним 18/01/16 Пнд 11:44:54 #462 №628047 
>>627852
Должен заметить, что ваешарк на кт редкостное глюкавое неузабельное говно получилось пока.
Аноним 18/01/16 Пнд 15:44:59 #463 №628236 
>>628047
Они еще тестируют его. И пока у них две версии (Qt, GTK), рано еще говорить о чем-либо говорить. Есть вероятность, что они и в Qt найдут какой-нибудь фатальный недостаток, коих у обоих тулкитов достаточно.
Аноним 18/01/16 Пнд 15:53:30 #464 №628240 
Я правильно понимаю, что если у GTK лицензия LGPL, то его можно использовать для создания проприетари?
Аноним 18/01/16 Пнд 15:57:51 #465 №628244 
>>609376 (OP)
Теку от этой шапки.
Аноним 18/01/16 Пнд 16:02:07 #466 №628249 
>>628244
Ты бы и от собаки тек.
Аноним 18/01/16 Пнд 23:07:48 #467 №628618 
14531476682870.jpg
Сканер портов то скиньте обратно, глянуть хочу чёт, будьте же вы людьми.
Аноним 18/01/16 Пнд 23:10:15 #468 №628622 
>>628618
Что тебе нужно? Ты так коряво сказал, что я подумал, что ты хочешь чтобы тебе запили сканер портов.
Аноним 18/01/16 Пнд 23:11:42 #469 №628627 
>>628622
Я про >>620355
Аноним 18/01/16 Пнд 23:13:44 #470 №628628 
>>628627
Если ты удалил это у себя, то уже не вернуть. Он никому не нужен, чтобы его хранить. А за твои ошибки тебе уже поянили.
Аноним 18/01/16 Пнд 23:14:46 #471 №628629 
>>628628
Да это не я, просто тредами как-то не баловался ещё, буду базу данных писать, запилю её на тредах, чтоль, один обработчик ввода, другие - выполнение. Ввод/вывод - пайпы, или сокеты, хмм....
Аноним 18/01/16 Пнд 23:19:04 #472 №628634 
14531483441970.jpg
>>609376 (OP)
Ребят, кстати, почему в рекомендациях нет "Искусства Эксплойта" второго издания Эриксона? Там же охуенное введение, как в С, так и сразу же на наглядных примерах его применение. Там даже с отладчиком сразу показывают, как работать надо.
http://www.ozon.ru/context/detail/id/4833854/
хотя по любому уже и так в сети есть
Аноним 18/01/16 Пнд 23:21:07 #473 №628637 
>>628629
Почитай про мнопоточность лучше. В случае с серваками, если я не ошибаюсь применяют две модели: 1) поток на соединение; 2) поток управляемый событием (то есть потоки используются по мере надобности);
Не расходуй ресурсы процессора впустую. На ввод/вывод требуется очень мало ресурсов процессора. Оно там не нужно.

>>628634
Не стоит. Ты видишь какой здесь контингент? Лучше пусть изучают принципы программирования, а не то каждый ньюфаг сразу будет хватать это и задавать глупые вопросы.
Аноним 18/01/16 Пнд 23:25:22 #474 №628644 
>>628637
> Почитай про
Я и так вкурсе вопроса.

>Оно там не нужно
Что значит не нужно, а кто будет рождать потоки на выполнение? Я хочу чтобы можно было, например параллельно вести поиск чего-то по базе. Да и её саму (базу) в отдельный процесс.
Аноним 18/01/16 Пнд 23:26:31 #475 №628648 
>>628637
Хз, я по нему 6 лет назад на Си кодить учился.
Аноним 18/01/16 Пнд 23:27:47 #476 №628649 
>>628634
Там говняный синтаксис асма.
Аноним 18/01/16 Пнд 23:29:46 #477 №628652 
>>628644
>Я и так вкурсе вопроса.
Сомневаюсь, если ты собрался на I/O выделять отдельные потоки. Или может я тебя не правильно понял, В любом случае, то что ты просил уже нет. Да и не нужно оно, так как не было сделано нормально (массив потоков в 4Гб).

>>628648
Ширусы писал?
Аноним 18/01/16 Пнд 23:34:16 #478 №628656 
>>628652
>если ты собрался на I/O
Это же база в отдельно процессе, её I - это приказы на выполнение чего-то. Да хуй с ним.

>>628634
Есть же модное импорто-замещение, касперски.
Аноним 18/01/16 Пнд 23:36:07 #479 №628657 
>>628656
> касперски
В общем-то, в очередном треде, советую почитать его писанину, про оптимизацию.
Аноним 18/01/16 Пнд 23:37:16 #480 №628659 
>>628649
Интеловский жи. Чем он так плох?
Аноним 18/01/16 Пнд 23:38:57 #481 №628660 
>>628657
Очень давно его не читал. Но честно говоря год назад наткнулся на его вью и как-то он имхо, как человек, дико испортился. Видимо после визита ФБР.
Аноним 18/01/16 Пнд 23:39:24 #482 №628662 
>>628659
Здесь вечный срач. Интелловский самый распространенный, так как интел его продвигает. AT&T многие считают очень удобным и более логичным. Но он настолько мало распространен.
Аноним 18/01/16 Пнд 23:41:29 #483 №628664 
>>628662
> AT&T
Он правильный, но не красивый. Как тут сравнивать.
Аноним 18/01/16 Пнд 23:42:55 #484 №628666 
>>628659
Он там как раз AT&T.
Аноним 18/01/16 Пнд 23:44:46 #485 №628668 
>>628666
Как можно зная один синтаксис, не осилить другой. Они же все равно похожи очень.
Аноним 18/01/16 Пнд 23:45:46 #486 №628670 
>>628666
А, нет, там, вроде, интеловский. Зря я сиранул на синтаксис.
Посоветуйте, как проще всего смотреть код сишных функций в дизассемблере, и я пойду обмазываться. До этого изучал в отладчике только проги на чистом асм.
Аноним 18/01/16 Пнд 23:46:04 #487 №628672 
>>628668
AT & T неприятный.
Аноним 18/01/16 Пнд 23:46:39 #488 №628673 
>>628672
Чем? Он скорее не привычный.
Аноним 18/01/16 Пнд 23:48:04 #489 №628678 
>>628673
% % % % % %
Аноним 18/01/16 Пнд 23:49:26 #490 №628682 
>>628678
Сложно запомнить, что регистры начинаются с % (%eax, %ebx или %rax %rbx) и значения с $ ($0x80, $40 и т.д)?
Аноним 18/01/16 Пнд 23:49:31 #491 №628684 
>>628670
>как проще всего смотреть код сишных функций в дизассемблере
Как это вообще понимать? Может глазами, там.
Аноним 18/01/16 Пнд 23:50:02 #492 №628688 
>>628682
Это не сложность, это некрасивость.
Аноним 18/01/16 Пнд 23:51:04 #493 №628691 
>>628688
Тебе смотреть на него или писать? В любом случае, код на нем более самодокументируемый.
Аноним 18/01/16 Пнд 23:53:19 #494 №628697 
>>628684
Например, мне нужно узнать, во что скомпилилась конкретная функция. Как ее найти в кратчайшее время?
Аноним 18/01/16 Пнд 23:56:05 #495 №628703 
>>628697
Скомпилить с флагом -S и прочитать вывод в текстовом файле?
Аноним 19/01/16 Втр 00:26:20 #496 №628736 
>>628634
http://www.proklondike.com/books/hacking/ericson_Haking_iskustvo_exploita_2009.html
Тут даже с исходниками.
Аноним 19/01/16 Втр 00:34:52 #497 №628749 
>>628736
Ну ладно, ладно, убедили, скачаю. пойду memcpy использовать как memmove - хакирь же. Напишу плагин к браузерам, что-бы можно было красивую и мелковесную рекламу вешать - вот будет заебись
Аноним 19/01/16 Втр 00:39:52 #498 №628752 
>>628736
С одной стороны, если учить Си и сразу смотреть, что творится на ассемблерном уровне, все становится простым и понятным. С другой стороны, потом нужно будет потратить много времени, чтобы избавиться от плохих привычек и начать писать кроссплатформенный код.
Аноним 19/01/16 Втр 00:55:03 #499 №628768 
>>628752
> начать писать кроссплатформенный код
Я бы хотел добавить, платформы и их популярность меняются достаточно часто, относительно того, что у новичка да и у других бывает в голове. Вот перешли все на 86-64, и охуели c того, что int может быть не равен размеру void*, да и стандарты до, были не полны, щас с11 - это реально глыба, и самое правильное на чём нужно писать в С. И так-то правильно понимать что ты пишешь, но не забывай что стандарт - это то в чём пересекаешься ты и те кто реализуют этому коду работу. Остальное - чёрная дыра.
Аноним 19/01/16 Втр 10:43:01 #500 №628982 
Такая задача в ЕГЭ.
Опи­ши­те на рус­ском языке или одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм под­сче­та мак­си­маль­но­го ко­ли­че­ства под­ряд иду­щих чет­ных эле­мен­тов в це­ло­чис­лен­ном мас­си­ве длины 30.
Вот мое решение. Правильно?
алсо, как сделать проверку на пустой элемент массива?
http://pastebin.com/xJGMMST1
Аноним 19/01/16 Втр 11:00:51 #501 №628990 
>>628982
Тебе разве здесь не нужно найти максимальное количество подряд идущих элементов? У тебя сейчас ищется общее количество подряд идущих. А по поводу пустого элемента — никак. В элементах, которые у тебя есть, могут быть любые числа. Даже если ты инициализируешь их каким-то числом, это может быть неправильно, так как придется зарезервировать одно число для этого.
По поводу кода. Зачем тебе sdafx, iostream и locale? Они не нужны. locale может пригодится, разве чтобы на кириллице писать. Зачем тебе system? Это тоже излишне.
Аноним 19/01/16 Втр 11:04:04 #502 №628993 
>>628990
sdafx стандарт в vs
iostream и locale, локале забыл убрать, иострим для остановки программы.
А точно, сейчас переделаю.
Аноним 19/01/16 Втр 11:10:34 #503 №628995 
Вот
http://pastebin.com/c1iJjDLj
Аноним 19/01/16 Втр 11:23:07 #504 №629001 
>>628993
Ты еблан даже не знаешь зачем sdafx нужен. Это блядь файл с прекомпилированными блядь заголовками, для проекта уровня laba2 они не нужны, потому что он и так за пару секунд компилиться.
Аноним 19/01/16 Втр 11:25:25 #505 №629004 
>>629001
Я же даун, что ты доебался, просто проверь правильность решения и иди нахуй.
Аноним 19/01/16 Втр 11:27:54 #506 №629007 
>>629004
Ты сам не можешь проверить? Записал программу, скомпилировал, запустил, смотришь на результаты. В чем проблема?
Аноним 19/01/16 Втр 11:29:08 #507 №629008 
>>629007
Там еще тип эффективность смотрится.
Я вот хз.
Аноним 19/01/16 Втр 11:32:35 #508 №629011 
>>629008
Лично мне, лень рассматривать внимательно твой быдлокод. У меня есть и другие дела. Думаю у других, здесь находящихся, все так же. У тебя простейшая задача. Сделал? Работает? Иди сдавай! Эффективно сделаешь когда ума наберешься.

>>629008
>хз
Ясно)))))
Аноним 19/01/16 Втр 11:43:45 #509 №629021 
>>629011
Ну ясно тогда, удачи в делах
Аноним 19/01/16 Втр 13:31:49 #510 №629091 
Только что узнал, что размер bool - 1 байт, охуеть.
Зачем он тогда нужен?
Аноним 19/01/16 Втр 14:30:32 #511 №629136 
>>628736
>>628634
Так ли хороша эта книга? На одном книжном сайте писали, что программы там суперхуевы, а другой каментатар ответил, что реальные программы пишутся так же, и поэтому изучение говна дает понимание того, как говно хекать.
Аноним 19/01/16 Втр 14:36:16 #512 №629139 
>>628634
Пиздец, стоит ли читать блевоту в начале, если я осилил всего Кернигана и Ричи? Будет ли польза? Я думаю, нет.
Аноним 19/01/16 Втр 14:37:17 #513 №629140 
>>629139
Лучше стандарт прочти. Гораздо полезнее.
Аноним 19/01/16 Втр 17:22:48 #514 №629257 
Почему в си до сих пор нельзя объявлять переменные в заголовке for? Что в этом сложного?
Аноним 19/01/16 Втр 17:27:17 #515 №629264 
>>629257
Повторюсь для тебя: "Стандарт прочти."
В С11 уже можно объявлять локальные переменные в любых блоках, в том числе и в заголовке фора.
Аноним 19/01/16 Втр 18:54:24 #516 №629335 
>>629091
>bool
Сам без понятия нахуя оно нужно, вот еслиб он конвертировал возврат из функции (из стандартных) как "получилось", "не получилось" - это другое дело, только это не С. Но а так то - прост)
Аноним 19/01/16 Втр 18:59:29 #517 №629338 
Да и размер bool, хуй его знает я не знаю имеет ли спецификацию. Тут же всё просто, 0 - false, всё остальное - true.

Я обычно пользуюсь 1 - true, 0 - что-то специальное, <= -1 ошибка, её тип.
Аноним 19/01/16 Втр 19:18:07 #518 №629354 
>>629335
В Си есть _Bool

>>629338
> <= -1 ошибка, её тип.
> 0 - что-то специальное
Что-то странная система.
Аноним 19/01/16 Втр 19:22:44 #519 №629361 
>>629354
> bool
> _Bool
Одно и тоже.

> Что-то странная система
Она логичная, есть диапазоны положительного исхода, есть отрицательного. Выявить принадлежность просто, >0 или <0. Что тут странного?
Аноним 19/01/16 Втр 19:50:06 #520 №629395 
>>629136
Достаточно хороша. Там очень наглядно разжевывают всю еблю с указателями, памятью, переполнениями буферов и, например, сетевая стекоебля.
Аноним 19/01/16 Втр 20:01:31 #521 №629409 
>>629361
>Одно и тоже.
И я о том же.

>Что тут странного?
Все нормально. Просто я не выспался и перемешалось все в голове.

>>629395
> всю еблю с указателями, памятью, переполнениями буферов и,
Это в K&R есть.

> сетевая стекоебля.
А это, уже не имеет прямого отношения к самой Си, но есть в различных источниках. Точкой входа можно взять "Компьютерные сети" Таненбаума.
Аноним 19/01/16 Втр 20:03:52 #522 №629410 
Кстати, по Си ведь еще книга С. Прата есть. Вроде тоже достаточно не плохая.
Аноним 19/01/16 Втр 20:05:56 #523 №629412 
>>628995
Я, конечно, сам в Си новичок, но я правильно понял, что ты делаешь массив без объявления элементов этого самого массива?
Аноним 19/01/16 Втр 20:07:17 #524 №629417 
>>629412
Я так понял он просто алгоритм описал, чтобы проверили, правильно или нет.
Аноним 19/01/16 Втр 20:10:41 #525 №629423 
>>629409
> "Компьютерные сети" Таненбаума
А чё не снайдер? Чтобы вкатится сходу, можно накатить статейку шаргина на рсдн Программирование сокетов в Linux.
Аноним 19/01/16 Втр 20:10:46 #526 №629424 
>>629410
>Stephen Prata "C Primer Plus, 6th Edition" (2014)
Уже есть.

>>629395
>Это в K&R есть.
Только там все с крайне наглядными примерами в отличие от K&R

>А это, уже не имеет прямого отношения к самой Си
с чего это не имеет?

В общем, мое дело предложить. Елси ты уже такой охуенный парень, что освоил C по K&R, то только успехов тебе на поприще остается пожелать.
Аноним 19/01/16 Втр 20:11:54 #527 №629425 
>>629424
>с чего это не имеет?
Ну тип потому что)
Аноним 19/01/16 Втр 20:13:14 #528 №629430 
>>629417
Как-то криво, имхо, идет работа с max и submax, мне почему-то кажется, что это можно соорудить с использованием всего одной переменной.
Аноним 19/01/16 Втр 20:16:44 #529 №629436 
>>629430
Павильно. В случае, если где-то в середине массива условие не будет соблюдаться, submax'y опять присвоится 0, и дальше твой if if(max<submax) будет False, в следствие чего и max будет считаться не правильно.
Аноним 19/01/16 Втр 20:19:19 #530 №629440 
>>629423
Может лучше сначала изучить как работает сеть, перед тем, как йписать приложения для работы с ней? Таненбаум дает фундаментальные знания просто.

>>629424
>Только там все с крайне наглядными примерами в отличие от K&R
Не осилил примеры из K&R?

>с чего это не имеет?
Потому, что это сторонние API, а не стандарт Си.

> Елси ты уже такой охуенный парень, что освоил C по K&R
Ну охуеть теперь.
Аноним 19/01/16 Втр 20:22:41 #531 №629447 
>>629440
>Может лучше сначала изучить как работает сеть
Лучше, всё-же, сходу иметь работающий код, а потом сидеть понимать как он работает, модифицирую его там, переписывая на более низкий уровень, итп. Хотя это всё, например, дискуссионно.
Аноним 19/01/16 Втр 20:24:30 #532 №629450 
>>629447
>Хотя это всё, например, дискуссионно.
Это спор о том, сверху или снизу начинать.
Аноним 19/01/16 Втр 20:43:25 #533 №629482 
Платиновый вопрос: как программы на сишке взаимодействуют с другими (внешними) программами на ней же, допустим из ГНУшных утилит?
То есть, допустим, я могу вызвать grep из сишки? Могу скормить вывод ls?
Аноним 19/01/16 Втр 20:49:57 #534 №629494 
>>629482
>Платиновый вопрос: как программы на сишке взаимодействуют с другими (внешними) программами на ней же
Посредством:
1) Перенаправление вывода другой программы;
2) FIFO;
3) Сигналы.
Аноним 19/01/16 Втр 20:50:29 #535 №629496 
>>629494
>То есть, допустим, я могу вызвать grep из сишки? Могу скормить вывод ls?
Перенаправление потоков. То есть stdout одной программы (ls) перенаправляется на stdin grep.
В качестве теста, можешь в цикле, прогнать getchar.
Аноним 19/01/16 Втр 20:51:09 #536 №629499 
Запуск: ls | твоя программа.
Аноним 19/01/16 Втр 20:51:17 #537 №629500 
>>629496
Он наверно про system()
Аноним 19/01/16 Втр 20:52:03 #538 №629501 
>>629500
Не внимательно прочитал.
Аноним 19/01/16 Втр 20:55:34 #539 №629506 
>>629482
https://en.wikipedia.org/wiki/Inter-process_communication
Аноним 19/01/16 Втр 20:58:37 #540 №629511 
>>629506
>>625885
>Например, под линь можно почитать боровского - коротенькие статейки с примерами.
Аноним 19/01/16 Втр 21:07:45 #541 №629516 
14532268657300.png
Интересно, откуда здесь взялся pop ecx? Ведь мы ecx до этого не сохраняли, а сохраняли ebp, который здесь вытаскиваем. Зачем? Эта инструкция повторяется десять раз, хотя мы ничего не кладем на стек кроме адреса возврата, который после выполнения call сам оттуда извлекается.
Аноним 19/01/16 Втр 21:09:08 #542 №629518 
>>629516
Блджад, хуево обрезал заголовки, где обмазывался на лурке пастами 600-куна.
Аноним 19/01/16 Втр 21:11:21 #543 №629519 
>>629518
Про пизду то смешно?
Аноним 19/01/16 Втр 21:13:00 #544 №629520 
>>629519
Нет, пасты про лисперов и хаскелистов смешнее.
Аноним 19/01/16 Втр 21:16:39 #545 №629525 
>>629516
Это достали из стека адрес аргумента printf, зря поторопился спрашивать.
Аноним 19/01/16 Втр 22:13:06 #546 №629551 
>>629511
>>629506
>>629494
Спасибо!
Аноним 20/01/16 Срд 01:01:13 #547 №629687 
У кого сурс шапки? Го перекатывать.
ПЕРЕКАТ Аноним 20/01/16 Срд 01:27:43 #548 №629718 
Запилил по-быстрому перекат со старой шапкой.

>>629715 (OP)
>>629715 (OP)
comments powered by Disqus

Отзывы и предложения