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

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

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

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

78 Кб, 792x1023

C Programming Language #9 # OP 26 Июн, 20:16 #780630 В конец треда | Веб

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

Что читать:

- Классика от Отцов: 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/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы>>780633>>782123>>782800>>792735>>794803>>798045

26 Июн, 20:19 #2 #780633

>>780630 (OP)
подписался на этот мэйн(войд)

Ответы>>780635

26 Июн, 20:21 #3 #780635

>>780633
Вкачусь в /Private define/

139 Кб, 850x1159

77 Кб, 604x429

132 Кб, 501x699

359 Кб, 836x1028

26 Июн, 20:31 #4 #780650

26 Июн, 20:39 #5 #780656

В шапке опять отсутствует история Сишечки, необходимая для понимания http://pastebin.com/UAQaWuWG

Ответы>>780665>>780708>>780710>>780741

26 Июн, 20:50 #6 #780665

>>780656
О чем ты? В треде полтора анона видели исходники на Fortran. Зачем им эта история, полная ненависти и призраков давно умерших языков?

Ответы>>780675

26 Июн, 20:55 #7 #780675

>>780665
Для понимания того откуда есть пошла Сишечка.
Без этого понимания в их картине мира будет неверное представление об уместности применения этого, с позволения сказать, языка для решения тех или иных задач в тех или иных условиях.

26 Июн, 21:33 #8 #780708

>>780656
Первый раз годная паста. А кто автор? Нашел только коммент в блоге Шнайера, но там явно ранняя версия пасты.

26 Июн, 21:36 #9 #780710

>>780656
А чем их Паскаль не устроил? Зачем было придумывать новый язык? Написали бы компилятор Паскаля со всеми нужными библиотеками.

Ответы>>780723>>780725>>780741

26 Июн, 21:47 #10 #780723

>>780710
Они написали гораздо лучше Паскаля - BCPL.

26 Июн, 21:49 #11 #780725

>>780710
Нельзя было бы спустя 40 лет писать тупые пасты.

26 Июн, 22:07 #12 #780741

>>780656
Вот это каноничная история: https://www.bell-labs.com/usr/dmr/www/chist.html

>>780710
https://www.bell-labs.com/usr/dmr/www/chist.html
пожалуй, это тоже стоит добавить в шапку, лол

Ответы>>780743

26 Июн, 22:08 #13 #780743

>>780741
вторая ссылка должна была быть https://www.lysator.liu.se/c/bwk-on-pascal.html

фикс

Ответы>>780746

26 Июн, 22:13 #14 #780746

>>780743
Читал, там же полный пиздеж, и вообще вроде этот текст первоапрельская шутка. Например, в большинстве реализаций Паскаля были модули. И что мешало создать свою реализацию со всем необходимым вроде адресной арифметики и областям видимости? Вот Хейлсберг например создал Turbo Pascal с ООП и низкоуровневыми средствами.
Не вижу ни одной причины, чем Паскаль не подходил для UNIX.

Ответы>>780754>>780941

26 Июн, 22:32 #15 #780754

>>780746
>Читал, там же полный пиздеж, и вообще вроде этот текст первоапрельская шутка.
Ты, наверное, путаешь с этим http://www.stokely.com/lighter.side/unix.prank.html
>Не вижу ни одной причины, чем Паскаль не подходил для UNIX.
Мне было бы достаточно только этого
>C and Ratfor programmers find 'begin' and 'end' bulky compared to { and }.

Ответы>>780797

26 Июн, 23:17 #16 #780797

>>780754
Я осознаю, что существуют безмозглые пидоры, у которых в список значимых критериев может входить, к примеру, синтаксис языка. Hу так накласть мне на них. Меня интересуют объективные критерии, а не цацки всякие.

Ответы>>780802>>780941

26 Июн, 23:26 #17 #780802

>>780797
>объективные критерии
В JavaScript-треде спроси про объективные критерии из-за которых он догрызает всех остальных.

Ответы>>780887

27 Июн, 00:58 #18 #780887

>>780802
Неужто из-за синтаксиса?

Ответы>>780906

27 Июн, 01:54 #19 #780906

>>780887
Из-за количества долбоебов.
С Юниксом и Си было точно так же.

27 Июн, 02:06 #20 #780910

> Haskell beats C using generalised stream fusion
> http://research.microsoft.com/en-us/um/people/simonpj/papers/ndp/haskell-beats-C.pdf

27 Июн, 07:28 #21 #780941

>>780797
Там целая статья объективных критериев. Распиши конкретно, что из него не является правдой и почему.
>>780746
>Например, в большинстве реализаций Паскаля были модули.
При чём здесь моудли. В статье ни слова про модули.

Ответы>>781218

sage 27 Июн, 15:00 #22 #781218

>>780941
> При чём здесь моудли. В статье ни слова про модули.

Жопой читал, хуесос?

> 2.4. There is no separate compilation
> The ``official'' Pascal language does not provide separate compilation, and so each implementation decides on its own what to do. Some (the Berkeley interpreter, for instance) disallow it entirely; this is closest to the spirit of the language and matches the letter exactly. Many others provide a declaration that specifies that the body of a function is externally defined. In any case, all such mechanisms are non-standard, and thus done differently by different systems.

Ответы>>781437

27 Июн, 20:43 #23 #781437

>>781218
А, ты про раздельную компиляцию. Ну так, ты сам же цитируешь
>The ``official'' Pascal language does not provide separate compilation, and so each implementation decides on its own what to do.
>In any case, all such mechanisms are non-standard, and thus done differently by different systems.
Тут нет пиздежа. Они признают, что есть реализации с поддержкой раздельной компиляции, но это никак не стандартизировано, и в этом проблема.

ревестирую помогание 27 Июн, 23:21 #24 #781677

https://lorwiki.ru/wiki/Программирование_и_отладка_на_C/ASM_-_Первые_программы._Знакомство_с_C_и_ассемблером._Компиляция,_линковка,_код_возврата._Вывод_текста

Пытался читать статью, попутно выполняя все описанные па. Негодяйский радаре отказался работать , точнее не работала команда ds. Ошибка чтения регистра. Не сталкивался никто с такой залупкой?

28 Июн, 01:15 #25 #781782

BCPL

http://www.cl.cam.ac.uk/~mr10/BCPL.html

Мануал по установке на Raspberry Pi (можно использовать SDL и OpenGL)
http://www.cl.cam.ac.uk/~mr10/bcpl4raspi.pdf

> most of the original Amiga operating system was written with it

> "Hello world" in the BCPL language on the Xerox Alto simulator
> http://www.righto.com/2016/06/hello-world-in-bcpl-language-on-xerox.html

28 Июн, 08:40 #26 #781873

Отцы! Опять иду к вам на поклон.
мимоебущийся с контроллерами
Есть одна функция и я нихуя не могу понять, что за параметры ей передаются:

void DISP_configure(const DISP_config_t *config)
{...

DISP_config_t представляет из себя следующую хуйню

typedef struct
{
uint8_t function;
uint8_t control;
uint8_t mode;
uint8_t cols;
uint8_t rows;
} DISP_config_t;

config описан в другой структуре и как я понял он равнозначен DISP_config_t

typedef struct
{
DISP_config_t config;
uint8_t current_x;
uint8_t current_y;
} disp_driver_t;

Хоть ткните носом куда копать, пожалуйста.

28 Июн, 08:40 #26 #781873

Отцы! Опять иду к вам на поклон.
мимоебущийся с контроллерами
Есть одна функция и я нихуя не могу понять, что за параметры ей передаются:

void DISP_configure(const DISP_config_t *config)
{...

DISP_config_t представляет из себя следующую хуйню

typedef struct
{
uint8_t function;
uint8_t control;
uint8_t mode;
uint8_t cols;
uint8_t rows;
} DISP_config_t;

config описан в другой структуре и как я понял он равнозначен DISP_config_t

typedef struct
{
DISP_config_t config;
uint8_t current_x;
uint8_t current_y;
} disp_driver_t;

Хоть ткните носом куда копать, пожалуйста.

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

28 Июн, 09:16 #27 #781887

>>781873
>void DISP_configure(const DISP_config_t *config)
DISP_config_t у тебя - тип переменной, а config её имя.
Создаешь переменную типа DISP_config_t, заполняешь все поля, потом передаешь эту структуру в DISP_configure. Все, дисплей сконфигурирован.

Ответы>>781897>>781923

28 Июн, 09:31 #28 #781897

>>781887
Напейсатель этого кода, в примере, выложил такую инициализацию:

static @inline void drivers_init(void)
{
DISP_configure(16, 2);
}

Сначала я прихуел, ожидая что-то типа DISP_configure(function, control, mode, 16, 2);
а потом прихуел и компилятор, выдав:

#error cpstm8 ..\..\src\main.c:52(19) incompatible argument type
#error cpstm8 ..\..\src\main.c:52(22) too many arguments

Теперь и у меня затык от too many arguments.

Ответы>>781914

28 Июн, 10:04 #29 #781914

>>781897
Смени ублюдочную библиотеку.
Это hd44780 или он же через i2c? Есть миллиард либ для них, просто выбери любую.

Ответы>>781918

28 Июн, 10:08 #30 #781918

>>781914
Это stm8, на него нет миллиарда либ, а в этой хорошо расписаны все дисплейные функции, пример от ST просто вырвиглазный пиздец по сравнению с этой. Да и неспортивно просто либу сменить. У ее написателя все работало. Правда на письма нихрена не хочет отвечать.

Ответы>>781922>>781923

28 Июн, 10:15 #31 #781922

>>781918
Берешь любую либу для атмеги и переделываешь HAL. Если это hd44780, то только вызовы gpio меняешь, если i2c, то его вызовы меняешь.
Сам для таких случаев использую либы как скелет, чтобы всю структуру не делать.

28 Июн, 10:16 #32 #781923

>>781918
Делай как я описал >>781887 и будет норм. Ну или ссылку на гитхаб дай.

Ответы>>781925

28 Июн, 10:21 #33 #781925

>>781923
https://github.com/a-d-v-e-n-t-u-r-o-u-s/WeatherStation/tree/develop/drivers/display

Ответы>>781928

28 Июн, 10:36 #34 #781928

>>781925
С его инитом ничего не соберется. Компилер правильно ругается на малоаргументов.
Pastebin.com/eybrb4jd
Так у тебя заининтится на две строки с 16 символами, без ебучего мигающего курсора.

Ответы>>781954

28 Июн, 11:21 #35 #781939

http://ideone.com/zLTlkV
Как в данном случае при делении получить более полное число?

94 Кб, 1248x551

28 Июн, 11:50 #36 #781954

>>781928
> Pastebin.com/eybrb4jd

Ответы>>781981>>781984

28 Июн, 12:13 #37 #781981

>>781954
Ну понятно же, что там опечатка, там 8, а не звездочка, ну ты чего.

Ответы>>782104

28 Июн, 12:14 #38 #781984

>>781954
Поправь uint*_t на uint8_t

Ответы>>782104

83 Кб, 1304x464

28 Июн, 13:56 #39 #782104

>>781981
>>781984
Хуйня кака-то с этой либой.

Ответы>>782145>>782431

sage 28 Июн, 14:06 #40 #782123

>>780630 (OP)
обоссал закуток байтодебилов

Ответы>>782126

28 Июн, 14:08 #41 #782126

>>782123
Уйди нахуй! Не доводи до греха.

28 Июн, 14:18 #42 #782145

>>782104
Точку с запятой поставь где просят

Ответы>>782160

28 Июн, 14:24 #43 #782160

>>782145
Пробовал, остается несовместимый с жызнью тип аргумента.

Ответы>>782363

28 Июн, 16:17 #44 #782363

>>782160
сделай чтоб было
DISP_configure(&config);
мимошел

Ответы>>782378

28 Июн, 16:28 #45 #782378

>>782363
Скомпилировалось, но не работает. Ща пошагово пропрыгаю, посмотрю чо к чему.

28 Июн, 17:14 #46 #782431

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

Ответы>>782438

28 Июн, 17:18 #47 #782438

>>782431
Да я чот ёбся с кряками этого иара еще для стм32, нихуя он ровно не встал, так я на него и забил.
> вывод ошибок на двощ выкладываешь
Разбирался уже неделю, потом решил спросить. Ладно, не буду больш раз тебя это так нервирует.

Ответы>>782538

28 Июн, 17:39 #48 #782467

Так, ананасы, прошу помощи с билдом. Короче, есть regex с унипсов, заточенный, по всей видимости под минговно. Собираю под шиндус. В общем, написал маленький смаке-файл
http://pastebin.com/r3s1Au15
И собрал, установив заранее CMAKE_BUILD_TYPE равный Release. Потом, как положено, либу закинул в lib, а хедер в include миниговен, естественно.
Но вот проблема, когда собираю тестовый сорец через гуся:
http://pastebin.com/MaEd6nzw
gcc -lregex -I... -o temp.o temp.c (к примеру)
этот гад высирает мне, что такая-то функция (regcomp) не найдена. Как решать, посоны, видать с линковкой что-то накосячил, но понять не могу.

Ответы>>782477>>782478

28 Июн, 17:47 #49 #782477

>>782467
>видать с линковкой что-то накосячил
Скорее с include
>-I...

28 Июн, 17:48 #50 #782478

>>782467
А вообще напиши точно, какое сообщение об ошибке выводится.

Ответы>>782514

28 Июн, 18:14 #51 #782514

>>782478
> (.text+0x1e): undefined reference to `regcomp'
> collect2.exe: error: ld returned 1 exit status

Линкор что-то выдает. Даже вручную заморочился собрал все:
> gcc -I... -I. -mwindows -O2 -o regex_internal.o -c regex_internal.c
(так для еще 3 раза для regex.c, regex_internal.c, regcomp.c)
потом арой прошелся:
> ar rs libregex.a *.o
Значит, собрал он все это дело в кучу, но опять выдает то же дерьмо. Я даже высыпал все определения из этой либы:
nm -C libregex.a
и он-таки выдал мне, что все-же определен regcomp:
> 0000000000003e30 T regcomp
Но не видит, падла такая он этого определения

Ответы>>782519>>782522

28 Июн, 18:18 #52 #782519

>>782514
-lregex после исходного файла воткни попробуй, а не до. Была у гцц какая-то хуйня насчет этого.

Ответы>>782531

28 Июн, 18:21 #53 #782522

>>782514
При сборке тестовой программы -static не указываешь?

28 Июн, 18:29 #54 #782531

>>782519
Спасибо, с смаковской сборкой получилось. А вот когда руками собирал через гуся, то вот что вышло
http://pastebin.com/Lt7Dn12K

Ответы>>782980

28 Июн, 18:33 #55 #782538

>>782438
Иар до 8к бесплатен. Сам им пользуюсь для стм8, знаю.

28 Июн, 22:59 #56 #782800

>>780630 (OP)
Как сделать дамп памяти процесса через C?
Допустим заинжектил кастомную либу в бинарник, как потом сохранить этот бинарник уже из памяти на диск?

lldb gdb не работают, т.к программа хитро написана - по pid - connection failed а через обычный запуск - exited with status = 45

Ответы>>782944

29 Июн, 03:06 #57 #782944

>>782800
Попробуй
ulimit -c unlimited
kill -3 PID

29 Июн, 08:18 #58 #782980

>>782531
Короче, продолжаю ебать Scons, собираю bugle. Этот хуесос, несмотря на то, что либа работает и линкуется нормально как-то блять не так собирает. Флаг -l должен быть в конце всех файлов, насколько хорошо я смог вычитать это в мануале по гусю, но тут нихуя. Я не могу понять, что этот хуй пытается вызвать и с какимим параметрами. Либа есть, руками линкуется, скунс не собирает, потому что -l где-то не там ставит. Есть какой-то способ посмотреть вывод?

Ответы>>782981

29 Июн, 08:23 #59 #782981

>>782980
Простите, насрал тут. Короче, этот хуй пытался все это время под msvc компилировать. Настриол под миниговны, собралось.

Ответы>>783875

sage 30 Июн, 01:08 #60 #783875

>>782981
> этот хуй пытался все это время под msvc компилировать
все, что следует знать про слишком умные билд-системы включая CMake

Ответы>>784012

30 Июн, 02:11 #61 #783899

У меня есть 3 буфера (прочитал 3 бинарных файла).
Пусть первый: a1 a2 a3 a4...
Пусть первый: b1 b2 b3 b4...
Пусть первый: c1 c2 c3 c4...
Где a[n], b[n], c[n] -- это последовательности по 2 байта.

Мне нужно сделать следующее:

1. Сложить 3 буфера в 1.
2. Чтобы последовательность байт в выходном буфере была такой:
a1 b1 c1 a2 b2 c2 a3 b3 c3...

Подскажите какой функцией это можно сделать?

Ответы>>783900>>783901>>783903

30 Июн, 02:14 #62 #783900

>>783899
первый, второй, третий-фикс

30 Июн, 02:20 #63 #783901

>>783899
Иными словами мне нужно создать псевдо 3-мерный вектор из 3 массивов.

30 Июн, 02:45 #64 #783903

>>783899
> Подскажите какой функцией это можно сделать?
Ты к нам из джавы что ли? Напиши сам свою функцию.

for (size_t j = 0; j < n; j++) {
output[j 3 + 0] = a[j];
output[j 3 + 1] = b[j];
output[j * 3 + 2] = c[j];
}

или

TYPE ∗ptr = output;
for (size_t j = 0; j < n; j++) {
∗ptr++ = a[j];
∗ptr++ = b[j];
∗ptr++ = c[j];
}

Ответы>>783910

30 Июн, 03:22 #65 #783910

>>783903
Спасибо. Заработало.

30 Июн, 10:20 #66 #784012

>>783875
По крайней мере, если использовать cmake, определив системные переменные CC и CXX, можно уже не думать сильно о последствиях, а вот скунс, который на пуфоне меня что-то сильно разочаровал, слишком он уж громоздкий код заставляет рожать

30 Июн, 11:06 #67 #784048

Можно ли в сишный сурс код вставлять ассемблерные вставки?

Ответы>>784050

30 Июн, 11:07 #68 #784050

>>784048
Можно. И нужно.

Ответы>>784052

30 Июн, 11:08 #69 #784052

>>784050
Я просто наткунлся на статью Криса К. ТАм они были, ну я решил повторить трюк, пишу через коде блокс, но оглушительно соснул. И вот после дневного переыва мне пришла мысль-может, я сделал что-то не так?

Ответы>>784058>>784121

30 Июн, 11:15 #70 #784058

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

Ответы>>784070

30 Июн, 11:24 #71 #784070

>>784058
Хорошо, спасибо за пояснени

30 Июн, 12:25 #72 #784121

>>784052
Есть Мокрософт-стандарт - _asm{mov rax, 0xf00d};
Есть GCC - __asm__("mov rax, 0xf00d");

Ответы>>785585

35 Кб, 779x435

30 Июн, 18:23 #73 #784414

Почему на пикче выделенный красным нулевой байт имеет адрес, оканчивающийся на 7? Ведь адрес начала это 1383000, он указывает на нулевой байт. Тогда:
68 - нулевой байт
65 - первый
6С - второй
6С - третий
6F - четвертый
21 - пятый
00 - шестой

Адрес шестого байта: 1383000 + 6 = 13883006, а не 1383007

Ответы>>784451>>784476

30 Июн, 18:50 #74 #784451

>>784414
> Почему на пикче выделенный красным нулевой байт имеет адрес, оканчивающийся на 7
Нет, у него адрес 0x01383006. Почему ты решил, что это не так?

Ответы>>784458

30 Июн, 18:56 #75 #784458

>>784451
Посмотри на значение регистра eax, оно перестало изменяться после остановки на нулевом байте. Там в конце 7.

30 Июн, 19:08 #76 #784476

>>784414
У выделенного адрес +6, а в eax адрес 7-го потому (скорее всего), что строка заканчивается нулем.

17 Кб, 388x359

30 Июн, 19:17 #77 #784485

Блять, можно ли шрифт увеличить? Аж глаз левый ломит.

Ответы>>784500

30 Июн, 19:36 #78 #784500

>>784485
Options->Appearence->Fonts. А про eax тебе уже сказали. Ты прочитал 0 по eax = 0x01383006, сделал inc eax, eax стал 0x01383007, а потом ты уже проверил, что прочитал, и вышел.

01 Июл, 11:02 #79 #785009

Божи, как это запомнить то, докуда там дабльфлоат, до куда там шорт-унсигнед-дабл-лонглонг спецификаторы.

Ответы>>785065

01 Июл, 12:18 #80 #785065

>>785009
Зачем это запоминать? Когда тебе нужна переменная смотришь учебник и выбираешь тип.

Ответы>>785091

01 Июл, 12:50 #81 #785091

>>785065
Всмысле, как запоминать. Я по другому не умею

Ответы>>785093

01 Июл, 12:51 #82 #785093

>>785091
>как
зачем
фикс

66 Кб, 904x597

728 Кб, 603x947

155 Кб, 829x226

1007 Кб, 849x948

01 Июл, 23:34 #83 #785569

Анон, я не понимаю: почему переход по правильному адресу заканчивается сегфолтом?

На первом скрине - пример из книги. Вывод сообщения об успешной авторизации там начинается по адресу 0x080484bf. У меня после компиляции он начинается по адресу 0x080485b6, смотри второй скрин. Если я забиваю буффер значением 0x080485b6, то появляется сообщение об успешной авторизации, а потом почему-то сегфолт. Но если забить буффер адресом 0x080484bf из книги, то сообщение выводится правильное, а сегфолта нет. Почему в этом случае его нет? На четвертом скрине видно, что находится по этому адресу. Это код функции проверки логина.

Почему переход по правильному адресу 0x080485b6 заканчивается сегфолтом?

Почему переход на 0x080484bf успешен и не вызывает сегфолт? Ведь этого адреса даже нет в листинге, смотри начало функции проверки.

Ответы>>785572>>785575

01 Июл, 23:37 #84 #785572

>>785569
Забыл кодес: https://ideone.com/ee5nWX

Объявления переменных и буффера сделал через alloca. Как в книге не работает на моей системе из-за компилятора, который кладет переменные как хочет.

Ответы>>785577

01 Июл, 23:42 #85 #785575

>>785569
То есть суть эксплойта, который я запостил, такова: переписываем ret в функции аутентификации адресом 0x080484bf (как в книге), и когда выполняется ret, он переходит в то место, где печатается сообщение об успехе. Но в моем случае это переход опять на код функции аутентификации.

Ответы>>785576

01 Июл, 23:43 #86 #785576

>>785575
>как в книге
крысу чёль читаешь? у него тоже такой пример в начале книги, и тоже падает - там чёто там стек править надо.

Ответы>>785580

01 Июл, 23:44 #87 #785577

>>785572
Ты уверен, что адрес возврата main() не затираешь? Почему сегфолт не отлаживаешь? На чем он сегфолтится-то? Запусти под gdb, погляди адрес, регистры и стек. И по 0x80484bf мало сдампил, не видно же, чем функция заканчивается.

Ответы>>785584

01 Июл, 23:46 #88 #785580

>>785576
Тоже такой? Это из книги Эриксона.

Ответы>>785581

113 Кб, 1180x1045

231 Кб, 1180x1045

01 Июл, 23:52 #89 #785581

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

1479 Кб, 1244x959

02 Июл, 00:01 #90 #785584

>>785577
>Ты уверен, что адрес возврата main() не затираешь?
Похоже, что затирал. Теперь интересно получается: работает через раз. Рандомизация стека?

02 Июл, 00:02 #91 #785585

>>784121
по идее можно в стринге закодить и передать управление туда.

Ответы>>785604

02 Июл, 00:52 #92 #785604

>>785585
Проще нормальным ассемблером [spiler]fasm[/spoiler] собрать нормальный объектник отдельно и с ним слинковаться.

126 Кб, 1508x210

03 Июл, 01:48 #93 #786444

Посоны, как конвертировать double в long? Ведь в double порядок может принимать значения вплоть до 2^2048, что явно, блядь, не поместится в long, где максимальное число 2^63. Даже сраный float не поместится по такой логике в long.
А если не поместится, то будет UB.
Что делать, господа?

P.S. Вот вам выдержка из стандарта. Тут говорится "value", т.е. подразумевается, что если непосредственное значение во время рантайма влазит, то все будет ок. Я правильно понял?

Ответы>>786448>>786644>>787418

03 Июл, 01:59 #94 #786448

>>786444
> если непосредственное значение во время рантайма влазит, то все будет ок
Да. Просто проверяй перед преобразованием.

> будет UB
Это одно из множества утверждений стандарта, где по-хорошему надо было бы написать, что значение выражение будет implementation defined или на худой конец indeterminate и, соответственно, заставить разработчиков компиляторов задокументировать, что на распространенных архитектурах ничего страшного не случится.

Ответы>>786604

03 Июл, 11:53 #95 #786604

>>786448
Спасибо

03 Июл, 12:34 #96 #786644

>>786444
Обычно int во float переводят. Не понимаю, зачем наоборот делать.

03 Июл, 12:48 #97 #786658

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

Ответы>>786744

03 Июл, 15:17 #98 #786744

>>786658
SICP
higlyrecommended

04 Июл, 05:19 #99 #787418

>>786444
ну а что ты хотел. всегда можно вручную выдрать нужное количество знаков, frexp и множ на степень 10. как например происходит вывод.

04 Июл, 14:05 #100 #787669

Нужна функция с сигнатурой mega_printf(const char * hui, ...), которая в зависимости от чего-то будет вызывать либо printf(hui, ...), либо fprintf(my_mega_pipe, hui, ...). Вообще, реально как-нибудь "..." пробросить?

(Раньше было сделано без пайпа, через переопределение stdout и stderr, но в новой редакции плюсов так бля нельзя)

Ответы>>787688

04 Июл, 14:32 #101 #787688

>>787669
http://stackoverflow.com/questions/1719784/c-programming-forward-variable-argument-list

Ответы>>787708

04 Июл, 15:00 #102 #787708

>>787688
Спасибо. Думал, есть вариант перекинуть placeholder.

05 Июл, 23:14 #103 #789080

Есть лог файл (... - всякий мусор):
...
...
size=4654,3543
...
...
weight=13
...
...
Мне нужно извлечь 3 целочисленные переменные из строчек начинающихся с size и weight. Где именно эти строчки будут находиться в файле заранее не известно. С помощью каких функций это можно сделать?

Ответы>>789405

05 Июл, 23:27 #104 #789095

Разбиваешь в цикле на строки (или просто ищешь конец строки), с помощью помощью strtok разбиваешь значения по знакам равно и запятым, с помощью strcmp сверяешь имена, с помощью strtol парсишь числа.

Ответы>>789105>>789405

05 Июл, 23:33 #105 #789105

>>789095
Спасибо!

06 Июл, 10:42 #106 #789405

>>789095
Зачем такой велосипед?
>>789080
fscanf же

15 Кб, 275x272

17 Кб, 364x152

15 Кб, 277x272

14 Кб, 372x152

restrict 07 Июл, 16:07 #107 #790564

С википедии:
>The restrict keyword is a declaration of intent given by the programmer to the compiler. It says that for the lifetime of the pointer, only the pointer itself or a value directly derived from it (such as pointer + 1) will be used to access the object to which it points.

Почему же когда я компилирую пик 1 с -O3, и clang, и gcc оба выдают что-то подобное пику 2? Почему после вызова f2 (функция ничего не делает, вынесена в отдельный файл просто чтобы не инлайнилась) значение аргумента для printf загружается из памяти, а не константой? Если изменить расположение вызова f2, то в обоих случаях будет использоваться константа (пик 3 и 4). Разве согласно приведенной выше цитате, объявление указателя p с restrict не говорит о том, что на всем протяжении времени жизни этого указателя доступ к переменной будет осуществляться только через него, что в свою очередь означает, что вызов f2 не должен повлиять на значение переменной a, а значит не требуется читать значение из памяти после вызова f2 и можно использовать константу?

Ответы>>790637

07 Июл, 17:10 #108 #790637

>>790564
Потому что f2 все равно может иметь доступ к указателю на *p, и это не является нарушением семантики restrict.
Вообще, restrict нужен чтобы сказать, что два или более указателя не пересекаются. Если нужна гарантия отсутствия других ссылок на объект то тебе в rust с его семантикой владения.

Ответы>>790664>>790791

07 Июл, 17:49 #109 #790664

>>790637
Понятно. В общем-то так все и понял, исходя чисто из наблюдений. Просто формулировка на википедии (да и в стандарте) такая, что вводит в заблуждение. А restrict, получается, довольно бестолковая вещь, работающая только для очень ограниченного набора ситуаций. Может мне правда стоит rust поизучать? Но что-то как-то страшно за него браться, честно говоря

Ответы>>790666>>790807

07 Июл, 17:54 #110 #790666

>>790664
> для очень ограниченного набора ситуаций
restrict - это багфикс. В языке есть strict aliasing, когда указатели несовместимых типов по определению указывают на разные объекты. Это помогает компилятору оптимизировать. Но если у тебя десяток указателей на int, то компилятору легче не становится. Чтобы это решить, сделали restrict. Другое дело, что большинство адекватных людей конпелирует с -fno-strict-aliasing, и на алиасинг им вообще насрать, как и на restrict.

Ответы>>790763

07 Июл, 19:40 #111 #790763

>>790666
>насрать, как и на restrict
особенно мне, с произвольной арифметикой.

07 Июл, 20:00 #112 #790791

>>790637
>Потому что f2 все равно может иметь доступ к указателю на *p
Как? Для меня это не очевидно.

Ответы>>790796

07 Июл, 20:03 #113 #790796

>>790791
Ну, например, до вызова f1 указатель на тот же объект, на который указывает p, был положен в глобальную переменную, из которой его возьмет f2.

Ответы>>790798>>790805

sage 07 Июл, 20:04 #114 #790798

>>790796
Не говоря уже об extern int a; в файле, содержащем f2, или в самой f2.

07 Июл, 20:10 #115 #790805

>>790796
Но это ведь будет уже другой указатель, а я типа гарантирую, что других указателей на объект быть не должно, нет?

07 Июл, 20:12 #116 #790807

>>790664
>Но что-то как-то страшно за него браться, честно говоря
Ну лол. Сказал так, будто тебе в зад ебстись предлагают.

445 Кб, 727x489

07 Июл, 21:49 #117 #790883

Анон, почему переменная окружения с кодом эксплоита каждый раз находится по новому адресу? Можно ли зафиксировать этот адрес для того, чтобы после переполнения буфера передать туда управление?

Ответы>>790885>>790891

07 Июл, 21:51 #118 #790885

>>790883
нет

какого года статью читаешь?

07 Июл, 21:54 #119 #790891

>>790883
Эти обои, этот каллинукс, этот хакенг... Коллбек-дегенерат, ето ты??????

Рандомизация адресного пространства, вась. Специально от мамкиных хакеров вроде тебя делали.

Ответы>>790916

07 Июл, 22:05 #120 #790916

>>790891
>Рандомизация адресного пространства
Блять, ну какого хуя пидорасы это сделали. Что читать про обход рандомизации?

Ответы>>790921

07 Июл, 22:10 #121 #790921

>>790916
Подумать головой и не хардкодить адреса, не, не подумал? Книжки призваны учить именно думать, а не лезть в них чтобы не думать.

КОЛЛБЕК - ЕТА ТРУДНАЯ И НИАЧИВИДНАЯ АБСТРАКЦЕЯ

Ответы>>790923

07 Июл, 22:13 #122 #790923

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

Ответы>>790929>>790942

07 Июл, 22:15 #123 #790929

>>790923
мне даже скучно тебе отвечать, /mov/ ждёт моего реценза

07 Июл, 22:29 #124 #790942

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

07 Июл, 22:32 #125 #790944

Максимальное байтоёбство обсуждают на https://news.ycombinator.com/item?id=12047981

> According to Intel themselves, REP MOVS is optimal only for large copies, above about 2kb. Below that the large startup costs of the microcode sequence can be beaten by hand-written code for the target architecture. Which explains why glibc takes that approach. The linux kernel on the other hand, just goes with:

> shrq
> andl
> rep movsq
> movl
> rep movsb

> Torvalds justified it as a way to force Intel and AMD to do the right thing and optimize the rep movs instructions. He was annoyed at the code complexity of "more optimal" apporaches, and like you, concerned about icache effects.

25 Кб, 489x373

07 Июл, 22:53 #126 #790974

Поясните студентоте в чём отличие кодинга на сях под 32 и под 64 битную винду? Сложно перейти? Упарываюсь Visual Studio 2015.

Ответы>>790984

07 Июл, 23:04 #127 #790984

>>790974
Нужно писать как можно более кроссплатформенный код, чтобы отличий не было (т.е., меняешь в VS Active Configuration с x86 на x64, и все так же работает, как и раньше). Разница в размерах всяких long и прочих указателей. На первых порах ты ее не заметишь.

Ответы>>791001

20 Кб, 310x262

07 Июл, 23:23 #128 #791001

>>790984
Спасибо, ты лучше моего тупого препода.

67 Кб, 818x284

07 Июл, 23:43 #129 #791013

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

Ответы>>791027

07 Июл, 23:52 #130 #791027

>>791013
Почитай про виртуальную адресацию. У каждой программы в современных ОС есть свое собственное адресное пространство. Процессор и ядро сами разбираются, какой странице физической памяти соответствует тот или иной адрес, принадлежащий процессу. Погугли virtual memory, virtual address space.

Ответы>>791073

08 Июл, 00:28 #131 #791073

>>791027
Ясно, все точно так же, как в винде.

Только почему якобы рабочий эксплоит завершается сегфолтом? Все так хорошо написано про вычисление адреса возврата, на который передается управление, но на деле что-то пошло не так. Использование -fno-stack-protector не помогает. Но этот ключ, вроде, не делает стэк исполняемым, а отключает стэк канарис.

https://ideone.com/J6C2XT

Ответы>>791076>>791302>>791312

08 Июл, 00:31 #132 #791076

>>791073
И -z execstack тоже не помогло.

08 Июл, 01:08 #133 #791091

откуда столько мамкиных хакиров повылезало?

08 Июл, 01:26 #134 #791100

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

Ответы>>791103>>791320

08 Июл, 01:30 #135 #791103

>>791100
Очевидно, что по этим и учиться, а когда будешь в них нормально разбираться, читать в бложеках про новые техники. Можешь параллельно со старым говном почитывать кулстори с Google Project Zero, например.

Ответы>>791282

08 Июл, 10:31 #136 #791282

>>791103
Не знаю, как учиться, если ничего не получается. В книге написано, что этот эксплоит работает 100%, и показан результат получения шелла, а у меня при двух отключенных защитах что само по себе - лабораторные условия вылетает сегфолт. У меня бугурт и руки опускаются, потому что непонятно, в чем дело. Пойду читать главу про написание эксплоитов на nasm, а после этого шеллкодинг под линукс Криса Касперски.

Ответы>>791302>>791320

08 Июл, 10:58 #137 #791302

>>791282
> Не знаю, как учиться, если ничего не получается.
Ну посмотри год книги и поставь на виртуалку соответствующий году линукс. Главное - понять основы, а с современными ОС, с активированными по умолчанию защитами, да с 64 битами кроме основ лезут всякие ненужные на этом этапе детали.

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

Ответы>>791312

08 Июл, 11:23 #138 #791312

>>791302
>Скинь название книги и главу, откуда ты взял >>791073
Джон Эриксон "Хакинг: искусство эксплоита"
Глава 0x330, страница 173.

Ответы>>791313>>791469>>791578

08 Июл, 11:25 #139 #791313

>>791312
Исходники к книге: http://rgho.st/7S94JhWft

sage 08 Июл, 11:35 #140 #791320

>>791100
>>791282
Для того и защиты, чтобы всякий лабодаун не мог по HOWTO получить shell.

08 Июл, 15:37 #141 #791469

>>791312
1) echo 0 > /proc/sys/kernel/randomize_va_space (лабораторные условия, да).
2) Почему оно не работает, а у автора работает: компилятор и опции компиляции. Если вкратце, strcpy помимо адреса возврата повреждает сохраненный стековый фрейм. Собери заново notesearch, отреверси пролог и эпилог main() и "донастрой" под нее свой эксплоит. Поставь бряк после closefd(), потыкай si и посмотри, какие регистры откуда восстанавливаются. В моем случае достаточно поменять в эксплоите размер буфера со 160 байт до 152 gcc 6.1.1, -O0, 32-битный линух.

Ответы>>791578

sage 08 Июл, 17:30 #142 #791578

>>791312
>>791469
Поковырялся, вот стабильный вариант с пояснениями но нет ничего лучше, чем отладить самому: http://ideone.com/MySygG

Ответы>>791721>>791806

37 Кб, 1049x297

607 Кб, 709x645

08 Июл, 20:44 #143 #791721

>>791578
Спасибо, сейчас буду разбираться.

А пока что я засел на неправильно сгенерированном бинарнике. В книге создание автономного шеллкода показывается на примере хелловорлда: https://ideone.com/KBW9qu

У автора программа просто ассемблируется и превращается в набор инструкций, но у меня nasm почему-то создает ELF-файл, смотри второй скрин. Погуглил опции nasm и нашел опцию -f bin, которая ассемблирует исходник как файл для доса. Сначала я думал, что в досе программы состояли из сплошных инструкций, но сейчас вспомнил, что в типичной программе для доса был стаб и выравнивание кода по смещению 100h.

Как сгенерировать только необходимые инструкции без этого мусора?

Ответы>>791735

83 Кб, 919x624

08 Июл, 20:49 #144 #791727

Вот как генерируется машинный код у автора.

8 Кб, 608x143

08 Июл, 21:08 #145 #791735

>>791721
> Как сгенерировать только необходимые инструкции без этого мусора?
Быстро и удобно: взять фасм, его макроязык, хоть и ебанутый на всю голову, но позволяет делать всякие вкусные вещи типа кодирования нулей в шеллкодесе прямо на стадии компиляции (естественно, макрос сам пишешь).

> -f obj
Просишь эльфа - получаешь эльфа.

> Погуглил опции nasm и нашел опцию -f bin, которая ассемблирует исходник как файл для доса
Она дефолтовая, емнип.

> что в типичной программе для доса был стаб и выравнивание кода по смещению 100h.
Во-первых, в .com стаба не было, во-вторых, чтобы был org 100h, его надо делать самому в исходнике. Так что nasm shellcode.s, bits 32 не забудь, и все конпелируется, как у автора.

430 Кб, 709x550

08 Июл, 21:15 #146 #791739

Пока экспериментировал с ключами, незаметно получился тот самый формат.

615 Кб, 940x513

08 Июл, 22:13 #147 #791775

Как в таких случаях находить причину краша? Адрес переменной окружения с шеллкодом известен, команда x/5i 0xbffff6d1 показывает, что по этому адресу действительно находится шеллкод, переполняю буфер адресом 0xbffff6d1, и возникает сегфолт. В дампе видно обращение по какому-то странному адресу.

notesearch: https://ideone.com/4yNRzC
хедер hacking.h к нему: https://ideone.com/51vvVO
последний шеллкод без нулей: https://ideone.com/oSg634
тулза для вычисления адреса переменной окружения с шеллкодом по ее имени и имени программы, в которой делаем переполнение: https://ideone.com/7KoBIN

Ответы>>791782>>791806

08 Июл, 22:21 #148 #791782

>>791775
Возьми вот это: http://rr-project.org/
Запиши и отмотай выполнение назад.

08 Июл, 22:54 #149 #791806

>>791775
Странный адрес - часть строки "ODE=". Очевидно, что это нихуя не адрес возврата, ты промахнулся. >>791578 смотрел?

> Как в таких случаях находить причину краша? Живую программу отлаживать проще. Собираешь с -ggdb, делаешь gdb сплоент, b main, run, брякнется в main, continue, брякнется в notesearch:main, disassemble, b *адрес_в_конце_функции, set disassemble on, si, si, si...

09 Июл, 00:22 #150 #791893

Кто-нибудь ИТТ имеет опыт программирования микроэлектроники, когда на девайсе 10-пиновый 1.27 мм разъем, а у программатора выход 10-пиновый 2.54 мм? Какие переходники использовать и где кабели покупать?

Ответы>>791894

09 Июл, 00:23 #151 #791894

>>791893
С программаторами в /ra/, наверное.

09 Июл, 12:14 #152 #792075

Нюфаня итт. Дейтелы ии Прата, что выбрать? Все такое вкусное

Ответы>>792209

09 Июл, 14:57 #153 #792209

>>792075
Прату. На самом деле, не ограничивайся чем-то одним, читай все, что под руку попадется.

80 Кб, 411x549

10 Июл, 13:06 #154 #792735

>>780630 (OP)
#include <stdio.h>

int main()

{

char letter;

int num1, num2;

printf("Enter any one keyboard character");

scanf("%c", letter);

printf("Enter two integers separated by a space:");

scanf("%d, %d", &num1, &num2);

printf("Numbers input: %d and %d \n", num1, num2);

printf("Letter input: %c", letter);

printf("Stored at: %p \n", &letter);

return 0;

}

Всё компилируется но после того как на
"Enter any one keyboard character" я ввожу символ и жму enter программа прекращает работу. Как быть?

80 Кб, 411x549

10 Июл, 13:06 #154 #792735

>>780630 (OP)
#include <stdio.h>

int main()

{

char letter;

int num1, num2;

printf("Enter any one keyboard character");

scanf("%c", letter);

printf("Enter two integers separated by a space:");

scanf("%d, %d", &num1, &num2);

printf("Numbers input: %d and %d \n", num1, num2);

printf("Letter input: %c", letter);

printf("Stored at: %p \n", &letter);

return 0;

}

Всё компилируется но после того как на
"Enter any one keyboard character" я ввожу символ и жму enter программа прекращает работу. Как быть?

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

10 Июл, 13:17 #155 #792744

>>792735
> scanf("%c", &letter);

Ответы>>792766

10 Июл, 13:44 #156 #792764

Посоветуйте гуи отладчик для линуха.

Ответы>>792833>>793023

146 Кб, 1366x768

10 Июл, 13:47 #157 #792766

>>792744
Исправил, но результат тот же.

Ответы>>792834

10 Июл, 14:53 #158 #792833

>>792764
Выбирай: https://sourceware.org/gdb/wiki/GDB Front Ends
Но реальные пацаны используют голый gdb.

10 Июл, 14:54 #159 #792834

>>792766
Уверен, что запускаешь перекомпилированный бинарник, а не старый?

Ответы>>792948

10 Июл, 16:25 #160 #792887

Поясните пожалуйста что это за ошибка оталдчика gdb
gdb -q ./a.out
Reading symbols from ./a.out...(no debugging symbols found)...done.
Или это нормально?

Ответы>>792937

10 Июл, 17:35 #161 #792937

>>792887
Нет, компилируй со флагом -g, тогда будут тебе символы.
gcc -g -o laba1 laba1.c

79 Кб, 682x1024

184 Кб, 800x1200

95 Кб, 800x466

10 Июл, 18:07 #162 #792948

>>792834
Перепроверял же. Стыдно быть таким как я. Спасибо анон, всё работает.

Ответы>>792951

10 Июл, 18:09 #163 #792951

>>792948
На третей пике тянка случайно не из моста в Тиберию?

Ответы>>792955

47 Кб, 520x600

10 Июл, 18:16 #164 #792955

>>792951
Да, она.

10 Июл, 19:30 #165 #793023

>>792764
gdb -tui, лол.

Ответы>>793030

10 Июл, 19:36 #166 #793030

>>793023
Как им пользоваться, мне не удается с помощью него открыть файл для отладки. Подскажи анон.

Ответы>>793034

10 Июл, 19:41 #167 #793034

>>793030
gdb имяфайла или командой target exec имяфайла, когда gdb уже запущен.
Предварительно желательно спиздить чей-нибудь конфиг типа https://github.com/dholm/dotgdb Ненастроенный gdb - боль.

10 Июл, 19:57 #168 #793048

Анон, как использовать hashcat для расшифровки хэша? Запускаю hashcat -m 0 ./myhash /usr/share/wordlists/rockyou.txt, и программа выдает line length exception.
Пердолиться долго не хочется. Насчет того, что хэш именно md5, не уверен, просто вытащил из БД какой-то хэш.

Ответы>>793049

10 Июл, 19:59 #169 #793049

>>793048
Иди-ка ты в /s/, уважаемый. Тут тред про сишечку.

11 Июл, 16:28 #170 #793604

Читаю C Primer Plus, делаю упражнения. Начало бодрое, но потом какие-то ненужные углубления идут. Сейчас на главе про string'и, я программировать-то не умею, а тут мне в одной главе все по верхам рассказали, а остальные главы какие-то дерби, тонкости языка и т.д. которые я не запомню и не выучу может я и не должен и юзать как справочник стоит?. Ну вот пол главы все о функции printf. Я понимаю, конечно, что я должен знать как оно работает, но не лучше ли сначала научиться использовать, а потом углубляться в тонкости? Скажите, это я неправильный или ?.?

Ответы>>793626

11 Июл, 16:50 #171 #793626

>>793604
Этот примиер плюс то еще говно, лучше читай K&R, там все нормально объясняется, а вот это говно с разжевыванием нинужной информации нахуй не нужно.

11 Июл, 20:28 #172 #793737

Двощ, объясни нубу, есть массив символов
char x[] = "32+"; , по которому проходит цикл со switch при этом в свитче выполняются сразу два условия и '+' и '-',
код прилагаю pastebin.com/y00vRZyk

Ответы>>793741>>793763>>794129

11 Июл, 20:36 #173 #793741

>>793737
>pastebin.com/y00vRZyk
http://easy-code.ru/lesson/switch-case-cpp

11 Июл, 21:01 #174 #793763

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

Долбоеб не может в указатели 11 Июл, 22:12 #175 #793830

У меня серьезная проблема: я не могу в указатели. Объясните что это такое, я нихуя не понимаю их принцип работы.
И да * - это указатель, и & - тоже указатель. Скажите правильно как это называется, я уже 2 недели ебусь с этим
Блядь, хочется выпилится из-за ебучих указателей

Ответы>>793841>>793853>>793854>>793954

11 Июл, 22:22 #176 #793841

>>793830
спасибо

11 Июл, 22:33 #177 #793853

>>793830
& - это оператор взятия адреса. Вот есть объект (переменная), он где-то в памяти лежит. И значение выражения &объект равно адресу (номеру) первого байта этого объекта в памяти. Это значение "указывает" на объект, т.е., это и есть указатель. Но важно осознавать, что не & - указатель, а значение выражения с & (или переменной, в которую ты его запишешь).
∗ - это оператор разыменовывания (дереференс). Значение выражения ∗указатель - это значение по адресу, хранящемуся в указателе.

&чтото -> получить адрес чего-то
∗указатель -> сходить по адресу и взять оттуда что-то

Ответы>>793877

11 Июл, 22:34 #178 #793854

>>793830
В любом непонятном случае дизассемблируй.
Указатель - это такая коробочка, в которой лежит адрес другой коробочки, в которой лежит объект.
Звездочка - это когда ты открываешь коробочку, переходишь по адресу и берешь объект.
В коробочке может быть не адрес, а другая коробочка, в которой уже лежит адрес. Это указатель на указатель. Чтобы получить объект через указатель на указатель, надо открыть одну коробочку (один раз применить звездочку), открыть внутреннюю коробочку (второй раз применить звездочку), и тогда ты доберешься до объекта в памяти.

Ответы>>793877>>793954

11 Июл, 23:18 #179 #793877

>>793853
>>793854
Я не он, но спасибо!

К примеру :
int x = 2;
int y = &x;
int z = y;

Получается я записал в переменную х число 2, после этого в значение по адресу y записал ячейку памяти х. Чему у меня тут z равно?

Буду благодарен, если объясните!

Ответы>>793888>>793904>>793910

11 Июл, 23:33 #180 #793888

>>793877
`int y = &x` — то же самое, что `int y = (int) &x`.

Ответы>>793909

11 Кб, 740x342

11 Июл, 23:50 #181 #793904

>>793877

11 Июл, 23:52 #182 #793909

>>793888
В этом разделе никогда не будет нормальной разметки

Ответы>>793913

11 Июл, 23:55 #183 #793910

>>793877
int x = 2;
// Компилятор создал переменную x по адресу 0x1000 (к примеру). Теперь x просто имя (псевдоним) для адреса 0x1000. Всегда (в пределах области видимости x), когда компилятор видит x, он думает об адресе 0x1000.
int ∗y = &x;
// Компилятор создал переменную y (указатель) по адресу 0x1004 и записал в нее значение 0x1000.
int ∗z = y;
// Компилятор создал переменную z (указатель) по адресу 0x1008 и записал в нее 0x1000. Почему 0x1000, а не 0x1004? Потому что = присваивает значения. Значение y - 0x1000.
printf("%i\n", ∗z);
// Оператор ∗ взял значение по адресу, содержащемуся в z и скормил его в printf. В z лежит 0x1000, по адресу 0x1000 лежит 2, в printf попало 2.
printf("%p\n", y);
// Оператора ∗ нет. Компилятор взял значение y и скормил его в printf. В y лежит 0x1004, в printf попало 0x1004.

11 Июл, 23:56 #184 #793913

>>793909
Её же тривиально добавить, если парсер не криворукой макакой пишется.

Ответы>>793920

11 Июл, 23:59 #185 #793917

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

Ответы>>793920

12 Июл, 00:02 #186 #793919

Нашел http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html

Тем кто еще не написал свою Болген ОС, нужно держать эту страничку в закладках.

Ответы>>793922>>793964

12 Июл, 00:04 #187 #793920

>>793913
К сожалению, автоматически (юзерскриптом) исправлять ошибки тех, кто постит с настоящими звездочками и настоящими [ i ] не получится, а макаке насрать, много раз уже просили. И в /d/, и кодера, когда он в /b/ прибегал, и соцсеточках тоже. Запилить галку "я не хочу разметку вообще никакую" для них слишком сложно. Написать не кривой парсер, видимо, тоже.

>>793917
Это нормально, лечится более частыми визитами в отладчик.

> где идет создание указателя
Указатель можно заиметь тремя способами: получить из функции типа malloc(), присвоить от другого указателя и получить оператором &.

> Где создание ссылки, а где операция взятия адреса.
А плюсы свои ты к нам не носи. Хотя там тоже все тривиально.

> указатели на функции
Для них сахарок, о них вообще не нужно думать. Не нужно & писать, чтобы взять адрес и не нужно разыменовывать, чтобы вызвать.
int (∗funcptr)(void); // Указатель на функцию, возвращающую int.

int foo(void) { printf("Hello, world!\n"); }

funcptr = foo; // Получили указатель, магия.
funcptr(); // Разыменовали, вызвали - магия.

Ответы>>793954

12 Июл, 00:07 #188 #793922

>>793919
Лучше вот это: http://c-faq.com/decl/spiral.anderson.html
Забавно, но существуют люди, считающие подобный синтаксис нормальным.

Ответы>>793928>>793964

12 Июл, 00:10 #189 #793928

>>793922
Этот синтаксис существует в теории. В реальности все адекватные люди упрощают его typedef-ами до читабельного состояния.

12 Июл, 01:21 #190 #793954

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

вы ещё и так объясняете - пиздец. хотя вот это >>793854 мило.

>>793920
> Для них сахарок
и что здесь сахарного? чем это отличается от s[2], @p ; p = s ; p [0] = 0 ; ?

Ответы>>793960

12 Июл, 01:29 #191 #793960

>>793954
Сахарок в том, что сколько бы ни было уровней указателей в funcptr, ее вызов не требует звездочек - оператор () будет неявно дереференсить указатель столько раз, сколько необходимо. Примерно то же происходит и с массивами, когда они используются там, где ожидается указатель.

Ответы>>793992

12 Июл, 01:45 #192 #793964

>>793919
>>793922
нах это надо
есть же табличка приоритетов операторов и их ассоциативности
ну и все сложные объявления легко читаются посредством использования или заучивания этой таблички

12 Июл, 02:15 #193 #793976

Объявляю я функцию, принимающую указатель на другую функцию, например:

void yoba(void (*f)(int), int x) {
f(x);
}

При этом если не пишу звёздочку перед f, такой код тоже компилируется:

void yoba(void f (int), int x) {
f(x);
}

Здесь yoba принимает уже не указатель на функцию, а саму эту функцию. Разве такое возможно?
Оба варианта выполняется с тем же результатом, например

void test(int x) {
printf("%d\n",x);
}
yoba(test, 5);

В обоих случаях выводится 5.

Ответы>>793980>>793983>>793991

13 Кб, 200x200

12 Июл, 02:25 #194 #793980

>>793976
>принимает уже не указатель на функцию, а саму эту функцию

этот как, блеать? запихивает код функции в стек штоли?

Ответы>>793981

12 Июл, 02:31 #195 #793981

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

Ответы>>793983

12 Июл, 02:36 #196 #793983

>>793976
Привет. Мы этот сахарок уже несколько постов предыдущих обсуждаем. Это указатель на функцию. Во всех случаях. Про эквивалентность ∗funcptr() и funcptr() знают многие, про то, что параметр-функция считается указателем на функцию - нет. Алсо, в одном из прошлых тредов обсуждали параметры-массивы, которые тоже неявно приводятся к указателю. И хорошо, потому что лучше написать с указателем самому, чтобы все было наглядно. Но это единственная причина.

>>793981
Никакого оверхеда, абсолютно идентичные вещи с точки зрения компилятора.

Ответы>>793989>>793991

12 Июл, 02:48 #197 #793989

>>793983
Спасибо за пояснения, анон.
Пойду спать.

49 Кб, 769x208

sage 12 Июл, 02:48 #198 #793991

>>793976
>>793983
Вот, даже Стандарт откопал. Заодно и про массивы.

Ответы>>796202

12 Июл, 02:51 #199 #793992

>>793960
хрень сморозил. нет там уровней, вот тебе :

int pp(void) { puts("anus") ; }

int (@pp1)(void) = pp ;
int (@@pp0)(void) ;

pp0 = & pp1 ;
(@pp0)() ;

Ответы>>793993

12 Июл, 02:55 #200 #793993

>>793992
И правда. Мои извинения.

12 Июл, 10:58 #201 #794129

>>793737
Нужно добавить break; в каждое условие.

12 Июл, 11:34 #202 #794145

Допустим, есть один хеллоу ворлд, как его скомпелять в минимальный екзешник?
Просто gcc hello.c -o hello.exe дает екзешник в 66 кБ. Это много же для хеллоу ворлда.

Ответы>>794151>>794654>>794844

12 Июл, 11:44 #203 #794151

>>794145
Есть Tiny C Compiler, там экзешиник хеловорлда в 2 кб выходит

Ответы>>794153

12 Июл, 11:57 #204 #794153

>>794151
Ага, точно, попробовал сейчас скомпилить. Но в шапке написано, что это плохой компилятор. Вот говорят, есть еще какой-то crinkler, но я не понял как его скрестить с gcc.

Ответы>>794157

12 Июл, 12:03 #205 #794157

>>794153
tcc поддерживает ansi c полностью
Вообще есть еще ключи оптимизации в gcc, можешь с ними поэксперементировать

Ответы>>794160

12 Июл, 12:06 #206 #794160

>>794157
полностью, да вот только div там странные результаты выдает

Ответы>>794162

12 Июл, 12:07 #207 #794162

>>794160
> div там странные результаты выдает
Что?

12 Июл, 20:34 #208 #794654

>>794145
У тебя винт на терабайт наверняка. Чего тебе так от десятка килобайт припекает? Ключик -s не забыл? Ну или отдельно strip.

Ответы>>795211

293 Кб, 732x1000

12 Июл, 23:22 #209 #794803

>>780630 (OP)
Может кто-нибудь знающий оценить этот курс? https://www.udacity.com/course/introduction-to-operating-systems--ud923
Или лучше взять книгу? Если да, то какую? Таненбаума?

sage 13 Июл, 00:41 #210 #794844

>>794145
Тебе в петушатник типа wasm.ru

Ответы>>795118

13 Июл, 14:42 #211 #795111

Есть два массива разных типов. Пусть условно один будет double, a другой int. Как мне сделать указатель на массив, чтобы потом работать с этим указателем и забыть про изначальный тип массива? Я собираюсь только читать из них.

Ответы>>795161

13 Июл, 14:59 #212 #795118

>>794844
>wasm.ru
Ммм, хороший сайт, спасибо.

13 Июл, 15:52 #213 #795161

>>795111
как ты это представляешь себе в машинных кодах, процессор будет сам угадывать?

13 Июл, 15:57 #214 #795166

Какую книгу по си читать, если не могу осилить K&R?

Ответы>>795196>>795197>>795536

13 Июл, 16:19 #215 #795196

>>795166
тык ты не читай, а вбивай приведенный код и решай упражнения оттуда
если читать, ничего не поймешь

13 Июл, 16:19 #216 #795197

>>795166
прата или дейтелы, выбирай

Ответы>>795200

13 Июл, 16:20 #217 #795200

>>795197
Дейтелы же только о с++ писали
Прата не понравился, слишком сильно разжевывает

Ответы>>795252

13 Июл, 16:36 #218 #795211

>>794654
Да в десяток килобайт можно с десяток зондов напихать, которые будут логировать все мои действия на пк, как это делается в VS.

Ответы>>795411

13 Июл, 17:19 #219 #795252

>>795200
Ну как так только про с++. Неправда

Ответы>>795253

13 Июл, 17:20 #220 #795253

>>795252
да, проебался
но их книга по си состоит на 2/3 из с++ , так что лучше в 4 раз попытаюсь осилить K&R

Ответы>>795312

13 Июл, 18:26 #221 #795312

>>795253
Ну так самые основы же. Если что-то непонятно будет-читаешь КиР, читаешь прату, ватевер.

13 Июл, 21:07 #222 #795411

>>795211
Да заебали вы. Во-первых, в VS нет зондов. Считать зондами телеметрию, которая записывает в лог имя модуля и таймстампы загрузки-выгрузки - это надо вконец мозолей объесться. И даже эта телеметрия по умолчанию отключена при линковке с динамической CRT и отключается при линковке со статической CRT (no_telemetry.obj).

Во-вторых, MinGW в тот десяток килобайтов, который тебе так не нравится, линкует статически те функции, которые в MSVCRT застряли в C89 (тот же печально известный vsnprintf) и прочий библиотечный код. Можешь вообще сказать гцц, что тебе не нужна стандартная библиотека, писать на Windows API и линковаться хоть в 512 байт. Можешь линковаться к какому-нибудь другому рантайму, тебе никто не мешает.

Ответы>>796060

14 Июл, 00:16 #223 #795536

>>795166
А что там тебе непонятно?
Я K&R осилил в 10 классе, лул, толку конечно немного было, но зато удовлетворил свою хотелку.

Долбоеб не может в указатели. Часть 2. Массивы 14 Июл, 13:46 #224 #795848

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

Ответы>>795876>>795891>>796023

14 Июл, 14:08 #225 #795876

>>795848
Подумай, что такое массив в Си, и как он хранится в памяти.

Ответы>>796032

14 Июл, 14:20 #226 #795891

>>795848
Я не умею думать.
Ну по идее массив это такой блок, в нем живут переменные

Ответы>>795925

14 Июл, 14:46 #227 #795925

>>795891
Массив это непрерывная область памяти

14 Июл, 16:17 #228 #795996

Почаны нашел книгу по си называется Head First C, там вроде интереснее пишут, чем КиР, да и охват тем больше. Стоит ее читать, опыта программинга на си нет?

Ответы>>796010>>796022

14 Июл, 16:38 #229 #796010

>>795996
бамп

Ответы>>796022

sage 14 Июл, 16:50 #230 #796022

>>795996
>>796010
Мудрец прошёл мимо.

14 Июл, 16:51 #231 #796023

>>795848
Массивы это синтаксический сахар над указателями. Никаких массивов на самом деле нет.

Ответы>>796027>>796032>>796170>>796179

14 Июл, 16:54 #232 #796027

>>796023
и переменные тоже сахар и функции, ничего этого на самом деле нет, просто память

35 Кб, 890x697

14 Июл, 17:11 #233 #796032

>>795876
>>796023
Вот поясните мне. Я передал в функцию какой-то массив. И решил сделать в этой функции sizeof на массив и на первый элемент массива. В итоге получилось то что на пике. Почему так? Вроде же массив является указателем на первый элемент и его размер 8, а размер первого элемента 4. Почему так? В чем подводные камни?

Ответы>>796034>>796035>>796048>>796202

14 Июл, 17:15 #234 #796034

>>796032
>Почему так?
А почему бы и нет? Кто тебе сказал, что размер указателя должен совпадать с размером значения, на которое он указывает?

Ответы>>796040

14 Июл, 17:16 #235 #796035

>>796032
в первом случае размер указателя 64бит, во атором случае размер элемента массива инт

Ответы>>796040

14 Июл, 17:19 #236 #796040

>>796034
>>796035
Тоесть если я беру первый элемент массива, который я передал функции, то это не указатель, а обычное число?

Ответы>>796042

14 Июл, 17:20 #237 #796042

>>796040
замени инт на чар и еще раз подумай

Ответы>>796045

14 Июл, 17:29 #238 #796045

>>796042
Заменил, теперь выходит 8 и 1 соответственно.
Подумол, у чара 1 байт в большинстве случаев размер переменной. А можно ли передать в функцию массив, чтобы его размер можно было вычислить в функции через sizeof(массив) / sizeof(массив[0]), ибо обычным путем это невозможно сделать

Ответы>>796047>>796053

14 Июл, 17:31 #239 #796047

>>796045
умножай размер массива на сайзоф элемента, ваш кэп

14 Июл, 17:32 #240 #796048

>>796032
sizeof(array) == sizeof(&array[0]) == размер указателя (зависит от платформы)
Настоящий размер массива из n элементов в памяти равен sizeof(array) * sizeof(n)
Т.к. сишка размера массива не знает (он нигде не хранится), то вычислить настоящий размер не может.

Ответы>>796051

14 Июл, 17:33 #241 #796051

>>796048
> равен sizeof(array) * n
selffix

Ответы>>796052

14 Июл, 17:35 #242 #796052

>>796051
Блин, совсем запутался, то есть sizeof(array[0]) * n

14 Июл, 17:38 #243 #796053

>>796045
struct Vector {
int size; // размер массива
int *data; // массив
};
Например. Или для int-массивов размер можно хранить в 0-м элементе.

Ответы>>796056

14 Июл, 17:40 #244 #796056

>>796053
ну мне нужна такая функция наподобие size() или length()
И вообще это же надо реализовать новую структуру данных , это сложно

Ответы>>796068

14 Июл, 17:42 #245 #796060

>>795411
В МИКРОСОФТ ШИНДОШС везде есть зонды, даже в блокноте и калькуляторе. Только БОГ ПИТУХ нас спасет. Покайтесь, ибо грядет вендекапец!

Ответы>>796063

14 Июл, 17:43 #246 #796063

>>796060
Это там, где до сих пор нет годного DE и процент популярности недавно стал 2%?

Ответы>>796080

14 Июл, 17:45 #247 #796068

>>796056
В С++ есть класс vector, устроенный примерно таким образом (хранит информацию о размере). В Си из коробки ничего такого нет, массивы там просто синтаксический сахар над указателями.
А у строк длина вычисляется, потому что последний символ 0.

Ответы>>796082

84 Кб, 570x590

14 Июл, 17:49 #248 #796080

>>796063
СПЕРМОВОР!

14 Июл, 17:50 #249 #796082

>>796068
Мне интересна хотя бы частичная реализация этого класса в си, чтобы было подобие "умного" массива, у которого можно вычислить его длину

Ответы>>796089

14 Июл, 17:54 #250 #796089

>>796082
Вариант со структурой выше. Я в своих прогах делал так.

Ответы>>796102

14 Июл, 18:01 #251 #796102

>>796089
а как реализовать тогда size()
без этого вектор бесполезен

Ответы>>796108>>796128

14 Июл, 18:04 #252 #796108

>>796102
и еще добавление в него, вроде push_back
для этого malloc надо юзать, если не ошибаюсь, но это сложно

Ответы>>796128

14 Июл, 18:23 #253 #796128

>>796102 >>796108
Свои функции напиши, которые будут читать/изменять поле, хранящее размер.

14 Июл, 18:38 #254 #796131

Что тут сложного? malloc выделяет столько байтов, сколько ты указываешь. Потом надо эту область памяти освободить.

struct Vector create_vector(int length, int itemsize)
{
struct Vector vec;
if (length <= 0 || itemsize <= 0) return NULL;
vec = (struct Vector)malloc(sizeof(vector));
if (!vec) return NULL;
vec->data = malloc(itemsize length);
if (!vec->data)
{
free(vec);
return NULL;
}
vec->size = length;
return vec;
}

void free_vector(struct Vector vec)
{
if (vec)
{
free(vec->data);
free(vec);
}
}

int length(struct Vector vec)
{
return (vec != NULL) ? vec->size : 0;
}

int resize(struct Vector vec, int newsize, int itemsize)
{
if (vec == NULL || newsize <= 0 || itemsize <= 0) return 0;
if (vec->size == newsize) return 1;
void newdata = realloc(vec->data, newsize * itemsize);
if (!newdata) return 0;
vec->data = newdata;
vec->size++;
return 1;
}

14 Июл, 18:38 #254 #796131

Что тут сложного? malloc выделяет столько байтов, сколько ты указываешь. Потом надо эту область памяти освободить.

struct Vector create_vector(int length, int itemsize)
{
struct Vector vec;
if (length <= 0 || itemsize <= 0) return NULL;
vec = (struct Vector)malloc(sizeof(vector));
if (!vec) return NULL;
vec->data = malloc(itemsize length);
if (!vec->data)
{
free(vec);
return NULL;
}
vec->size = length;
return vec;
}

void free_vector(struct Vector vec)
{
if (vec)
{
free(vec->data);
free(vec);
}
}

int length(struct Vector vec)
{
return (vec != NULL) ? vec->size : 0;
}

int resize(struct Vector vec, int newsize, int itemsize)
{
if (vec == NULL || newsize <= 0 || itemsize <= 0) return 0;
if (vec->size == newsize) return 1;
void newdata = realloc(vec->data, newsize * itemsize);
if (!newdata) return 0;
vec->data = newdata;
vec->size++;
return 1;
}

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

14 Июл, 18:43 #255 #796136

>>796131
Опять звезды проебались.

struct Vector ·create_vector(int length, int itemsize)
{
struct Vector ·vec;
if (length <= 0 || itemsize <= 0) return NULL;
vec = (struct Vector·)malloc(sizeof(vector));
if (!vec) return NULL;
vec->data = malloc(itemsize · length);
if (!vec->data)
{
free(vec);
return NULL;
}
vec->size = length;
return vec;
}

void free_vector(struct Vector ·vec)
{
if (vec)
{
free(vec->data);
free(vec);
}
}

int length(struct Vector ·vec)
{
return (vec != NULL) ? vec->size : 0;
}

int resize(struct Vector ·vec, int newsize, int itemsize)
{
if (vec == NULL || newsize <= 0 || itemsize <= 0) return 0;
if (vec->size == newsize) return 1;
void ·newdata = realloc(vec->data, newsize · itemsize);
if (!newdata) return 0;
vec->data = newdata;
vec->size++;
return 1;
}

14 Июл, 18:43 #255 #796136

>>796131
Опять звезды проебались.

struct Vector ·create_vector(int length, int itemsize)
{
struct Vector ·vec;
if (length <= 0 || itemsize <= 0) return NULL;
vec = (struct Vector·)malloc(sizeof(vector));
if (!vec) return NULL;
vec->data = malloc(itemsize · length);
if (!vec->data)
{
free(vec);
return NULL;
}
vec->size = length;
return vec;
}

void free_vector(struct Vector ·vec)
{
if (vec)
{
free(vec->data);
free(vec);
}
}

int length(struct Vector ·vec)
{
return (vec != NULL) ? vec->size : 0;
}

int resize(struct Vector ·vec, int newsize, int itemsize)
{
if (vec == NULL || newsize <= 0 || itemsize <= 0) return 0;
if (vec->size == newsize) return 1;
void ·newdata = realloc(vec->data, newsize · itemsize);
if (!newdata) return 0;
vec->data = newdata;
vec->size++;
return 1;
}

Показать весь текст

14 Июл, 19:10 #256 #796155

сложна, все слишкам сложна!11 школотрон, вкатывайся в чтонить другое

Ответы>>796157

11 Кб, 640x400

14 Июл, 19:13 #257 #796157

>>796155
Будто ты не был школьником. Все тупили на указателях. Вот сделал небольшой рисунок, как массивы хранятся в памяти, надеюсь будет понятнее.

Ответы>>796162>>796166

9 Кб, 640x400

14 Июл, 19:20 #258 #796162

>>796157
Небольшая опечатка, исправил.

14 Июл, 19:21 #259 #796166

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

Ответы>>796169>>796173

14 Июл, 19:23 #260 #796169

>>796166
з.ы.
хотя ты возможно другой анон

14 Июл, 19:23 #261 #796170

>>796023
нет
в си есть тип данных "массив", но в языке нет встроенных средств манипуляции с ним

Ответы>>796179

14 Июл, 19:27 #262 #796173

>>796166
Я сам стал заниматься программированием в 1991 году на спектруме, и в 12 лет мог писать на ассемблере (и даже в машинных кодах). Не надо заливать, никто с ассемблера не начинал.

Ответы>>796177

14 Июл, 19:30 #263 #796177

>>796173
>никто с ассемблера не начинал.
я начинал, или жопочтец? я считал, что си слишком сложна11 и начал с тасма и книги тома свана, ахуенная книга. вот.

Ответы>>796178

14 Июл, 19:32 #264 #796178

>>796177
Ты фантазер. Начинали даже не с Си (как и асм он тогда считался языком для опытных программистов), а с Бейсика или Паскаля.

Ответы>>796181>>796214

14 Июл, 19:33 #265 #796179

>>796170
>>796023
http://pastebin.com/KrfTz7vV

14 Июл, 19:35 #266 #796181

>>796178
в школе был бейсик на какихто электрониках, я его люто ненавидел, а про паскаль я тогда не знал, а вот книгу по асму купил и понеслось

Ответы>>796184

14 Июл, 19:36 #267 #796184

>>796181
MSX BASIC это был, охуенная штука, там даже были спрайты

Ответы>>796186>>796188

14 Июл, 19:39 #268 #796186

>>796184
Единственное, строки там были с номерами вместо QBASIC с метками в GOTO. Из-за этих ебаных номеров и не любили Бейсик.

14 Июл, 19:40 #269 #796188

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

14 Июл, 19:54 #270 #796202

>>796032
Когда массив является параметром функции, он неявно конвертируется в указатель. >>793991 вот совсем недавно даже стандарт выкладывали. Поэтому sizeof() возвращает размер указателя. В остальных случаях sizeof() с массивами работает, как ожидается.

14 Июл, 20:06 #271 #796214

>>796178
Вот же ты доебался до того анона. Я тоже начинал с ассемблера, что тут такого. Просто когда решил заняться программированием, я сначала хотел скачать вижуал студию, но как увидел, что качаться она будет чуть ли не неделю, то скачал вместо нее masm (а вскоре перешел и на fasm). А сишку и другие языки я попробовал только после того, как перекатился на линукс через пару лет.

Ответы>>796218>>796219

14 Июл, 20:10 #272 #796218

>>796214
>вижуал студию
лол, я в турбо си вкатывался

14 Июл, 20:11 #273 #796219

>>796214
Сколько лет назад это было/сколько человек в твоей мухосрани?

Ответы>>796224>>796228

14 Июл, 20:14 #274 #796224

>>796219
ты считаешь знание ассеблера, хотябы поверхностно, необязательным для серьезного погромиста?

Ответы>>796238

14 Июл, 20:16 #275 #796228

>>796219
Лет 10-11 назад, и у меня тогда как раз появился "доступ" к интернету (через мобильник со скоростями в районе пары кб/сек). В моей стране около 250 тыс человек, а в городе хз. Конечно же, я не от хорошей жизни взялся тогда именно за асм. Но может оно и к лучшему.

14 Июл, 20:24 #276 #796238

>>796224
Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели clock() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы.
Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
Байтоёбство включает в себя:
1. Императивный стиль программирования как начало байтоёбского пути.
2. Дрочка на машинно-ориентированные типы данных (собственно, основной симптом байтоёбства) и последующее за ней закономерное возмездие байтомудакам в виде big endian vs. little-endian, особенности обработки чисел с плавающей точкой и.т.д.
3. Предтерминальные стадии байтоёбства - интринсикоёбство и его более тяжёлая форма - инлайн-ассемблероёбство. Подсадка начинается с убеждённости поциента в необходимости ручками использовать SIMD -инструкции.
4. Терминальная стадия, как итог п.3, тру-ассемблероёбство и "хроническая низкоуровневая оптимизация головного мозга"
В нашем мире, к счастью, подобные симптомы с распространением Java, C# и прочей "замещающей терапии" встречаются реже, однако остались две отрасли, входящие в зону риска:
1. Гейдев. Байтоёбство в гейдеве берёт своё начало в 70х-80х, поскольку именно тогда зародилась традиция байтоёбства в геймдеве. Обязаны этим, в основном, восьмибитным соснолям и домашним компьютерам, которые, обладая малым объёмом ОЗУ и имея скудные средства программирования, требовали делать на них ёба-игры. Эта традиция продолжилась и далее, всё благодаря тем же консолям, на которых консолерабы должны были выпускать игры 5 лет, задрачивая их убогие байтоёбские архитектуры по полной. К сожалению, подобная практика перешла и на ПК, где байтоёбство, в общем-то не так оправдано. К слову байтоёбам-игроделам дали шанс выбраться из этой трясины в 2002 году, когда майкрософт запилила дуднет и менеджед дайректикс к нему. Но байтоёбы остались верны своим указателям, плюсам и байтоёбской оптимизации. Зашоренность, верность привычкам, безыдейность, десу.
2. Эмбеддед. Причины почти всё те же, что и в гейдеве. Маломощное железо, пара сотен байт озу, деревянные игрушки, прибитые к полу и.т.д. К этому прибавляется огромное количество разных железок разномастных архитектур, для которых нет толковых тулчейнов. Из хорошего - в последние годы байтоёбство в этой сфере потихоньку излечивается, спасибо дядям из ARM co ltd, сделавшим свою архитектуру более менее распространённым стандартом среди всех архитектур и огромному количеству появившихся фреймворков и компиляторов языков для этой платформы.
Также распространено ложное утверждение что байтоёбство крайне необходимо в системном программировании. На самом деле этого легко избежать. Рассмотрим среднестатистическую аппаратную платформу. Краеугольными камнями любой аппаратной платформы являются:
1.Процессорная архитектура
2.Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства
3.Протоколы управления этими самыми внешними устройствами.
Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, скормить этот файл генератору платформ и на выходе получить готовый фреймворк-скелет нашей операционной системы, доступ к которому можно получить из любого языка программирования. Вот так вот просто, если бы байтоёбство гологного моска не мешало.

14 Июл, 20:24 #276 #796238

>>796224
Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда байтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели clock() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы.
Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
Байтоёбство включает в себя:
1. Императивный стиль программирования как начало байтоёбского пути.
2. Дрочка на машинно-ориентированные типы данных (собственно, основной симптом байтоёбства) и последующее за ней закономерное возмездие байтомудакам в виде big endian vs. little-endian, особенности обработки чисел с плавающей точкой и.т.д.
3. Предтерминальные стадии байтоёбства - интринсикоёбство и его более тяжёлая форма - инлайн-ассемблероёбство. Подсадка начинается с убеждённости поциента в необходимости ручками использовать SIMD -инструкции.
4. Терминальная стадия, как итог п.3, тру-ассемблероёбство и "хроническая низкоуровневая оптимизация головного мозга"
В нашем мире, к счастью, подобные симптомы с распространением Java, C# и прочей "замещающей терапии" встречаются реже, однако остались две отрасли, входящие в зону риска:
1. Гейдев. Байтоёбство в гейдеве берёт своё начало в 70х-80х, поскольку именно тогда зародилась традиция байтоёбства в геймдеве. Обязаны этим, в основном, восьмибитным соснолям и домашним компьютерам, которые, обладая малым объёмом ОЗУ и имея скудные средства программирования, требовали делать на них ёба-игры. Эта традиция продолжилась и далее, всё благодаря тем же консолям, на которых консолерабы должны были выпускать игры 5 лет, задрачивая их убогие байтоёбские архитектуры по полной. К сожалению, подобная практика перешла и на ПК, где байтоёбство, в общем-то не так оправдано. К слову байтоёбам-игроделам дали шанс выбраться из этой трясины в 2002 году, когда майкрософт запилила дуднет и менеджед дайректикс к нему. Но байтоёбы остались верны своим указателям, плюсам и байтоёбской оптимизации. Зашоренность, верность привычкам, безыдейность, десу.
2. Эмбеддед. Причины почти всё те же, что и в гейдеве. Маломощное железо, пара сотен байт озу, деревянные игрушки, прибитые к полу и.т.д. К этому прибавляется огромное количество разных железок разномастных архитектур, для которых нет толковых тулчейнов. Из хорошего - в последние годы байтоёбство в этой сфере потихоньку излечивается, спасибо дядям из ARM co ltd, сделавшим свою архитектуру более менее распространённым стандартом среди всех архитектур и огромному количеству появившихся фреймворков и компиляторов языков для этой платформы.
Также распространено ложное утверждение что байтоёбство крайне необходимо в системном программировании. На самом деле этого легко избежать. Рассмотрим среднестатистическую аппаратную платформу. Краеугольными камнями любой аппаратной платформы являются:
1.Процессорная архитектура
2.Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства
3.Протоколы управления этими самыми внешними устройствами.
Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, скормить этот файл генератору платформ и на выходе получить готовый фреймворк-скелет нашей операционной системы, доступ к которому можно получить из любого языка программирования. Вот так вот просто, если бы байтоёбство гологного моска не мешало.

Показать весь текст
Ответы>>796242>>796248>>796659

14 Июл, 20:30 #277 #796242

>>796238
>просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000%
я работал в такой конторе, лучшим решением для инженеропидоров был апгрейд и перезагрущка серверрв раз в неделю. по сабжу, ты ебаный еаркоман оторванный от реалий.

Ответы>>796246

Обработка сочетаний клавиш 14 Июл, 20:31 #278 #796244

Как возможно реализовать обработку сочетаний клавиш как в nano? Пишу простой текстовый редактор

Ответы>>796247

14 Июл, 20:34 #279 #796246

>>796242
з.ы.
там на железо тратили около 10 лямов в год и требовали твоего выхода сверхурочно с премией 500 рублей в месяц в качестве бонуса)

14 Июл, 20:35 #280 #796247

>>796244
ос какой? хотя похуй, перехваткой клавы

Ответы>>796323

14 Июл, 20:38 #281 #796248

>>796238
Двачую, байтоёбы рабы во всём - рабы машины. рабы предубеждений, рабы производительности, рабы стереотипов, рабы обрабатываемых штеудом х86 типов данных - для них всё, что не кратно 2 байтам и больше 16 байт не может быть примитивным типом, хотя число - это просто число, оно может быть целым, дробным, рациональным, комплексным, но не "в 2 байта в 4 байта в 8 байт". Да, байтобляди были актуальны пару-тройку десятков лет назад, когда кроме этого пресловутого отлизывания регистров и микросхем не было способов заставить машину быстро решать задачу. Но теперь-то в нашем распоряжении оптимизирующие компиляторы, многоядерные процессоры с параллелизацией, которые производительнее машин 20летней давности в сотни тысяч раз. Жаль, что программирование было поглощено стереотипным быдлом, не могущим в думать, и способным работать лишь по зазубренной инструкции, написанной кровью и потом сотен павших хомячков-байтоёбов до него. Настоящее, полноценное программирование, благодаря подобным обмудкам, мало теперь где востребовано. Хотя там где оно востребовано, можно кататься как в масле сыр и получать в три раза больше не то что сениор-байтоёба, а ёбанного заместителя директора быдлоконторы в которой этот байтоёб работает. С другой стороны это и хорошо - в космическую промышленность, Data mining и прочие сложные и непосильные для императивных байтохомячков сферы попадает лишь элита.

Ответы>>796251>>796549>>796640

14 Июл, 20:43 #282 #796251

>>796248
самодвочер, тебе пичет?

14 Июл, 22:33 #283 #796300

это блять что, ньюфаг тред? вы, блять, совсем достоинство потеряли.

14 Июл, 22:38 #284 #796305

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

Ответы>>796314

14 Июл, 22:43 #285 #796314

>>796305
При частых выделениях/освобождениях будет фрагментироваться память.

Ответы>>796318

14 Июл, 22:54 #286 #796318

>>796314
И он узнает про пулы.

14 Июл, 22:57 #287 #796323

>>796247
Винда

Ответы>>796345

14 Июл, 23:19 #288 #796345

>>796323
ReadConsoleInput()

Ответы>>796471

15 Июл, 03:53 #289 #796471

>>796345
а мингв не будет эмулировать ввод как в линукс? ну там, с ключами.

Ответы>>796474

15 Июл, 03:55 #290 #796472

хотя причём тут линь, это же дело в терминале их esc кодах....

15 Июл, 04:00 #291 #796474

>>796471
Да ради бога. Если вместо виндовой консоли возьмешь mintty, будет тебе ввод, как в линуксе. Или возьми ncurses и будь кроссплатформенным.

15 Июл, 09:31 #292 #796549

>>796248
>число, оно может быть целым, дробным, рациональным, комплексным,
>в космическую промышленность
А ты почитай на чем пишутся спутники и марсоходы, и какой жёсткий realtime нужен ракете.
Там байтоебство цветет и пахнет, потому что по другому никак.

Ответы>>796564

15 Июл, 10:12 #293 #796563

Стандартобляди, поясните плиз. Какой тип дается по умолчанию, если в декларации функции забыть его указать? Для примера, какой тип будет у параметра bar в таком случае?
void foo(bar){
printf("%lf p\n",bar/0.3048);
}

Ответы>>796980

15 Июл, 10:14 #294 #796564

>>796549
>Там байтоебство цветет и пахнет, потому что по другому никак.
Спизданул школьник 8 класса в ответ на пасту времен молодости моего деда.

Ответы>>796567

15 Июл, 10:22 #295 #796567

>>796564
Просто съеби в /b

Ответы>>796593

405 Кб, 2458x821

86 Кб, 1239x472

15 Июл, 11:32 #296 #796593

>>796567
>Просто съеби в /b
Нет ты. Единственная причина почему ваше байтоебство актуально в космической сфере — это потому что 100-летние деды в начальстве боятся обосраться с новыми технологиями и в 2016 году по прежнему используют 8-битные процессоры и ассемблер.

Ответы>>796595>>796597

15 Июл, 11:36 #297 #796595

>>796593
Ты когда нибудь слышал про радиацию?

15 Июл, 11:38 #298 #796597

>>796593
Ты думаешь, будь это не 8085, то писали бы на православном JavaScript? Один хер это бы был Си с ачсемблерными вставками, байтоебством и записями в регистры.
Такова реальность realtime

Ответы>>796617

35 Кб, 512x512

15 Июл, 12:03 #299 #796617

>>796597
C++.

Ответы>>796682

15 Июл, 12:40 #300 #796640

>>796248
> целым, дробным, рациональным, комплексным
Где иррациональные числа?

Ответы>>796654>>796656

15 Июл, 13:04 #301 #796654

>>796640
А что ты с ними делать собрался, содомит?

Ответы>>796658

15 Июл, 13:06 #302 #796656

>>796640
> комплексным

Ответы>>796657

15 Июл, 13:07 #303 #796657

>>796656
> дробным, рациональным,
одно и то же

15 Июл, 13:07 #304 #796658

>>796654
с какой целью интересуешься?

15 Июл, 13:10 #305 #796659

>>796238
Ок. Каждому своё и каждый пишет так как ему нравится.
Но разве любая функция из функционального программирования не написана в императивном стиле?
Вообще не совсем понятно: мне необходимо выбрать какой-то кусок данных из массива данных. Я использую SQL, пишу функционально инструкцию, но разве на низком уровне она не состоит из тех же базовых императивных кирпичиков?
И тогда в чём собственно суть разницы если функции это есть те же самые подпрограммы императивного языка?

Ответы>>796665>>796690

15 Июл, 13:17 #306 #796665

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

>Unlike in imperative languages, a function in Haskell is really a function, just as mathematicians intended it to be. To distinguish it from cheap imitations, Haskell functions are sometimes called pure functions. Here are the fundamental properties of a pure function:
>A function returns exactly the same result every time it's called with the same set of arguments. In other words a function has no state, nor can it access any external state. Every time you call it, it behaves like a newborn baby with blank memory and no knowledge of the external world.
>A function has no side effects. Calling a function once is the same as calling it twice and discarding the result of the first call. In fact if you discard the result of any function call, Haskell will spare itself the trouble and will never call the function. No wonder Haskell has a reputation for laziness (more about it later).

Ответы>>796673

15 Июл, 13:30 #307 #796673

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

Ответы>>796680>>796681>>796683

15 Июл, 13:45 #308 #796680

>>796673
>Тогда реквестирую пример когда функция из императивного языка возвращает каждый раз разный результат при одном и том же наборе аргументов.
http://pubs.opengroup.org/onlinepubs/009695399/functions/time.html

15 Июл, 13:47 #309 #796681

>>796673
Суть чистой функции в том, что её вычисление можно рассматривать как переписывание термов. Это позволяет, к примеру, свободно заменять выражения их результатом или вычислять их по необходимости (лениво).
Разумеется, не все функции в функциональных ЯП — чистые. Однако, в том же хаскеле есть разграничение между чистыми функциями и грязными.

Ответы>>796686

15 Июл, 13:49 #310 #796682

>>796617
Думаешь в плюсах байтоёбства мало?

Ответы>>796684

15 Июл, 13:49 #311 #796683

>>796673
>Всё равно не понятно
Байтоебы смешали в кучу понятия подпрограммы, процедуры и функции. В результате правильным посонам пришлось назвать функции — чистыми функциями.
У функции есть четкое математическое определение:
>"Let E and F be two sets, which may or may not be distinct. A relation between a variable element x of E and a variable element y of F is called a functional relation in y if, for all x ∈ E, there exists a unique y ∈ F which is in the given relation with x. "We give the name of function to the operation which in this way associates with every element x ∈ E the element y ∈ F which is in the given relation with x, and the function is said to be determined by the given functional relation. Two equivalent functional relations determine the same function."

15 Июл, 13:52 #312 #796684

>>796682
Меньше, чем в С. Можно обмазаться абстракциями вместо того, чтобы строчить копипасту, например.

15 Июл, 13:54 #313 #796686

>>796681
> как детерминированное переписывание термов
Важная поправка.

15 Июл, 13:58 #314 #796690

>>796659
> каждый пишет так как ему нравится.
А должен бы писать качественно.
> И тогда в чём собственно суть разницы если функции это есть те же самые подпрограммы императивного языка?
ВСЕ РАВНО ВСЕ КОМПИЛИРУЕТСЯ В МАШИННЫЙ КОД
Абстракции - слыхал о таких вещах?

Ответы>>796707

15 Июл, 14:06 #315 #796694

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

Ответы>>796697

15 Июл, 14:14 #316 #796697

>>796694
>но куда прогрессивней абстрагироваться в хатку с евой грин и её братцем
Проиграл с этого мечтателя.

Ответы>>796699

15 Июл, 14:16 #317 #796699

>>796697
образованный, революционер.

15 Июл, 14:28 #318 #796707

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

Надо всё же почитать про это более подробно

Ответы>>796721

15 Июл, 14:55 #319 #796721

>>796707
ВСЕ МОЖНО СДЕЛАТЬ ФУНКЦИЯМИ
Просто сдристни, бестолочь. Ты очень тупой.

Ответы>>796724>>796726

15 Июл, 14:58 #320 #796724

>>796721
>ВСЕ МОЖНО СДЕЛАТЬ ФУНКЦИЯМИ
как это понимать, в сымсле в замкнутой форме?

15 Июл, 15:01 #321 #796726

>>796721
> ВСЕ МОЖНО СДЕЛАТЬ ФУНКЦИЯМИ
...кроме IO.

Ответы>>796732>>796741

15 Июл, 15:10 #322 #796732

>>796726
псевдослучайные числа это не совсем ио
чтение и запись в память тоже в каком-то смысле ио

Обосрался вприсядку с символами 15 Июл, 15:13 #323 #796734

Поясните почему размер char 1 байт? Как можно использовать для чара всего 256 символов? А как же юникод? Си на него положил хуй?

Ответы>>796735>>796744>>796745>>796980>>797710

15 Июл, 15:13 #324 #796735

>>796734
да

Ответы>>796746

15 Июл, 15:18 #325 #796741

>>796726
Но в манямире функциональных петухов нет IO, файлов, GUI и сетевых протоколов. Это очень удобно - объявить все нерешаемые функциональной парадигмой задачи грязными и нечестивыми, узаконить страдания для всего неправосланого, и затем сидеть, прихлебывая борщ, дрочить факториалы и постить на хабре статьи про теоркат для чайников.

15 Июл, 15:24 #326 #796744

>>796734
Потому что legacy. Правильное название char - uint8_t.

Ответы>>796745>>796746

15 Июл, 15:26 #327 #796745

>>796734
нет

>>796744
нет

Ответы>>796746

15 Июл, 15:29 #328 #796746

>>796744
>>796745
>>796735
Так как тогда используется юникод, если char это максимум 256 символов? Ведь по С99 можно же юникод включать

Ответы>>796747>>796781

15 Июл, 15:31 #329 #796747

>>796746
wchar_t и префикс L. и ещё иди читай что такое utf-8, долбаёбушка.

Ответы>>796750>>796788

15 Июл, 15:42 #330 #796750

>>796747
Я не умею читать, объясни мне что это

15 Июл, 16:47 #331 #796781

>>796746
другой тип используется

Ответы>>796782

15 Июл, 16:48 #332 #796782

>>796781
Какой? когда я пишу setlocale, то происходит автоматический typedef на новый тип?

Ответы>>796788

15 Июл, 16:52 #333 #796788

>>796782
>>796747

15 Июл, 20:41 #334 #796980

>>796563
Тип по умолчанию у нас int. Но желательно сказать GCC -Werror=implicit, чтобы такого пиздеца не допускать.

>>796734
Кроме wchar_t, который уже упомянули (и который по сути implementation defined), в C11 у нас есть еще char16_t, в который влезает вся BMP и char32_t, в который влезает весь Unicode вообще. В целом, проще везде использовать UTF-8 (и хранить в char), а в тех нечастых случаях, когда требуется быстрый доступ к отдельным codepoint по их индексу в строке, декодировать UTF-8 до charX_t.

Ответы>>797713

16 Июл, 18:03 #335 #797710

>>796734
>Поясните почему размер char 1 байт?
Это определение байта в С: 1 char.

16 Июл, 18:04 #336 #797713

>>796980
> В целом, проще везде использовать UTF-8 (и хранить в char)
Этот осознал написанное в http://www.utf8everywhere.org/, берите с этого пример.

16 Июл, 21:28 #337 #797873

Пачаны, хочу написать свою реализацию printf, которая использует только прерывания биоса, какие подводные ками?
Что можно почитать?

Ответы>>797894>>797896>>797909>>797985

16 Июл, 21:47 #338 #797894

>>797873
ну начать придётся с написания видеодрайвера

Ответы>>797895

16 Июл, 21:50 #339 #797895

>>797894
Прерывания биос, говорит он тебе — какие ещё драйверы?

Ответы>>797899>>797922

16 Июл, 21:55 #340 #797896

>>797873
Если у тебя ОС нет, то и подводных камней нет. Иначе непонятно, зачем тебе это.

Ответы>>797899

16 Июл, 21:56 #341 #797899

>>797896
>>797895
А что почитать можно по этому? Я просто хочу написать хеловорлд, который будет выполняться без ОС

Ответы>>797902

16 Июл, 21:57 #342 #797902

>>797899
http://wiki.osdev.org/Main_Page

Ответы>>797907>>797911

16 Июл, 22:00 #343 #797907

>>797902
Я не могу в английский, только в русский

Ответы>>797908

16 Июл, 22:01 #344 #797908

>>797907
http://ru.osdev.wikia.com/

Ответы>>797910

16 Июл, 22:01 #345 #797909

>>797873
Спиздил когда-то из ядра NetBSD компактный и простой переносимый printf. http://pastebin.com/nBi6G5cT
Сейчас уже не могу найти его в дереве ядра.

Всё, что нужно функции do_printf — это твой коллбэк для печати одного символа, первым аргументом. Очень удобно!

16 Июл, 22:01 #346 #797910

>>797908
> 2017
> ru

110 Кб, 370x885

16 Июл, 22:02 #347 #797911

>>797902
Обосрался вприсядку, я только сегодня открыл для себя си впервые

Ответы>>797913

16 Июл, 22:03 #348 #797913

>>797911
Для загрузки ядрышка с помощью GRUB и высирания "Руддщб Цщкдв!" в текстовый буффер VGA ничего этого не надо.

Ответы>>797914

16 Июл, 22:04 #349 #797914

>>797913
А что надо?

Ответы>>797917

16 Июл, 22:05 #350 #797917

>>797914
nasm, gcc, ld, qemu и образ дискетки с grub

16 Июл, 22:08 #351 #797922

>>797895
Я прерываниями BIOS пользовался только под MS-DOS, помню. Как дела с этим обстоят в современных ОС? Там всё то же самое? Мне чё-то кажется современная ОС тебя нахуй пошлёт с твоими вызовами прерываний.

Ответы>>797925>>797928

16 Июл, 22:10 #352 #797925

>>797922
Я хочу без системы. Просто загрузиться с груба и вывести сраный хеловорлд

Ответы>>797927>>797930>>798019

16 Июл, 22:12 #353 #797927

>>797925
а, ну ладно

16 Июл, 22:12 #354 #797928

>>797922
int 0x10 сводится к записи в видеопамять по фиксированному адресу (в текстовом режиме). Никто не мешает тебе самому писать в видеопамять.

Ответы>>797938

16 Июл, 22:14 #355 #797930

>>797925
Смотри, grub загружает тебя в 32-битный режим, так что прерывания оттуда просто так не подёргаешь, они (в основном) все для realmode

Ответы>>797934

16 Июл, 22:18 #356 #797934

>>797930
Тем более не стоит начинать с груба. Лучше осилить перевод процессора в protected mode и long mode самостоятельно, тогда и вопросы про прерывания отпадут.

Ответы>>797936

16 Июл, 22:19 #357 #797936

>>797934
> Лучше осилить перевод процессора в protected mode и long mode самостоятельно
Очень интересное занятие, ага.

16 Июл, 22:20 #358 #797938

>>797928
т.е. это заведётся в любой ОС? не знал

Ответы>>797940

16 Июл, 22:23 #359 #797940

>>797938
В ОС (ну кроме простых вроде DOS) тебе никто не даст писать в видеопамять, и даже если даст, режим видео будет неподходящий, и даже если подходящий - охуеет видеодрайвер.

Ответы>>797945

16 Июл, 22:27 #360 #797945

>>797940
ну, как я и предполагал, собственно...

16 Июл, 23:50 #361 #797985

>>797873
сделал printf в биосе
@
работает как puts

Ответы>>797987

16 Июл, 23:51 #362 #797987

>>797985
А в чём разница, кроме форматирования?

Ответы>>797989

16 Июл, 23:53 #363 #797989

>>797987
ну как-бы во всём. puts только строку выводит, как-бы. вспоминаю как писал вывод double - так и не дописал блин...

16 Июл, 23:54 #364 #797990

ну и в следствии чего, там нет промежуточного буфера, и всего этого оверхеда....

Ответы>>797991

16 Июл, 23:57 #365 #797991

>>797990
Буфер в 15 байт, это, конечно, жуть...

Ответы>>797993

16 Июл, 23:58 #366 #797993

>>797991
чего 15 байт поехавший?

Ответы>>797994>>797997

16 Июл, 23:59 #367 #797994

>>797993
> чего 15 байт
Буфер.

Ответы>>797996

17 Июл, 00:00 #368 #797996

>>797994
может быть кило байт? дудик.

Ответы>>797998

17 Июл, 00:01 #369 #797997

>>797993
Буфер.
А его заполнение – оверхед, сука.
15 байт если дадут данные по ссылке – это уже дохуя кешмиссов и индерекций.
Оверхед, нахуй.

17 Июл, 00:01 #370 #797998

>>797996
Зачем для печати double буфер в 15 килобайт?

Ответы>>798000

17 Июл, 00:05 #371 #798000

>>797998
подожди, вот встречный вопрос: а как ты 2^300 вместишь в 15 байт?

Ответы>>798001>>798003

17 Июл, 00:06 #372 #798001

>>798000
> 10^300

17 Июл, 00:08 #373 #798003

>>798000
Ладно, 150.

Ответы>>798004

17 Июл, 00:10 #374 #798004

>>798003
ладно, 150, выводить как будешь, по кускам? угарно в твоём мирке.

Ответы>>798006

17 Июл, 00:11 #375 #798006

>>798004
По символу. В чём проблема?

Ответы>>798009

17 Июл, 00:15 #376 #798009

>>798006
ну лад. пацан только не говори.

Ответы>>798011

17 Июл, 00:16 #377 #798010

пацанам

17 Июл, 00:16 #378 #798011

>>798009
Они и так прекрасно знают, как символы в видеобуфер пишутся.

Ответы>>798012

17 Июл, 00:17 #379 #798012

>>798011
аа, ты про биос уровень свой.

17 Июл, 00:30 #380 #798019

>>797925
x86 bare metal programming

17 Июл, 01:13 #381 #798043

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

Ответы>>798045>>798053

17 Июл, 01:14 #382 #798045

>>798043
>>780630 (OP)

Ответы>>798046

17 Июл, 01:17 #383 #798046

>>798045
Вон у жетбреинсов есть clion это не годнота?
в шапке про эту иде не написано.

А что по подводным камням?

Ответы>>798048

17 Июл, 01:20 #384 #798048

>>798046
а понял, силаон это иде, но разве там не должен быть компилятор встроенный?
Буду благодарен совету по этой иде.

ВС чет качать много, мне впадлу если честно.

Ответы>>798051

17 Июл, 01:23 #385 #798051

>>798048
посмотри еще шапку c++ треда
в иде нету компилятора, компилятор отдельно.
если впадлу качать то там ведь есть pelles c + можешь скачать code blocks или освоить емакс
а вообще просто поставь линукс, там гцц будет
а под виндой visual c

Ответы>>798073

17 Июл, 01:26 #386 #798053

>>798043
mingw, cygwin

Ответы>>798079

17 Июл, 01:44 #387 #798073

>>798051
> поставить линукс, поставить emacs, перекатится, юзая geany в процессе, перекататься в генту, отрастить бороду, разложится на липовый мёд.
такой план. вдохновляет, нет?

Ответы>>798074

17 Июл, 01:45 #388 #798074

>>798073
Нет. Это какой-то тролинг.

Ответы>>798076

17 Июл, 01:48 #389 #798076

>>798074
оке
^C x h ^C w

13 Кб, 829x167

17 Июл, 01:51 #390 #798079

>>798053
Что из этого устанавливать, братан?

Ответы>>798080>>798081

17 Июл, 01:52 #391 #798080

>>798079
Очевидно, что Ада, Фортран и ObjC тебе пока не нужны. Ты ведь сишечку хочешь?

Ответы>>798084

17 Июл, 01:53 #392 #798081

>>798079
фортран конечно

17 Июл, 01:54 #393 #798083

ксати не знал что gcc может в обджект ц. не думал что это законно.

7 Кб, 371x198

17 Июл, 01:55 #394 #798084

>>798080
>>798080
Да. Оке, я понял.

Ответы>>798093

65 Кб, 1365x463

17 Июл, 01:58 #395 #798089

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

Есть инфа какая че там еще надо отметить?

Ответы>>798092>>798103>>798105

17 Июл, 01:59 #396 #798092

>>798089
Нафига тебе automake?

Ответы>>798093>>798096

17 Июл, 02:01 #397 #798093

>>798092
Это сам установщик по дефолту галки там некоторые уже проставил, я кроме >>798084
этого никаких галок не ставил

17 Июл, 02:03 #398 #798096

>>798092
а кстати, а на винде он не работает? никогда не компилял на винде

Ответы>>798105

17 Июл, 02:10 #399 #798103

>>798089
Так че поможете нет? Или я на похуе ничего отмечать больше не буду.

17 Июл, 02:14 #400 #798105

>>798096
Работает: msys предоставляет минимальное окружение.

>>798089
Оставь все по дефолту. Потом доустановить можно всегда.

17 Июл, 02:56 #401 #798127

Спасибо пацаны, пойду читать классику из шапки.

Всем спасибо.

Ответы>>798477

17 Июл, 04:52 #402 #798148

Постараюсь решить проблему самостоятельно, но на данный момент ничего на ум не приходит

int n;

do
{
printf("Enter the height from please: ");
n = GetInt();
}
while (n <= 0, n > 23);

error: relational comparison result unused [-Werror,-Wunused-comparison]
while (n <= 0, n > 23);

Понятия не имею, почему одно придралось. Мб неправильно задал условие?

Программа предлагает ввести целое число, которое не должно быть отрицательным и не больше 23. Потом она должна вывести на экран какую-то лабуду, которую ДЛЯ ЭКСПЕРИМЕНТА прописал так:

else
printf("YOBA\n"); //Это после while.

Пхд вместо n <= 0 нужно убрать =, но это проблему не решает.

Ответы>>798149>>798155>>798158>>798160

17 Июл, 04:55 #403 #798149

>>798148
> ,

Ответы>>798150

17 Июл, 04:57 #404 #798150

>>798149
Что не так с запятой?

Ответы>>798151

17 Июл, 04:59 #405 #798151

>>798150
я - элита, а ты должен приклоняться, а то я и так напорол тут хуеты на жизнь вперёд.

Ответы>>798152

17 Июл, 05:01 #406 #798152

>>798151
Да-да, иди передёрни с утреца и посмотри телепузиков.

Маме не забудь сделать чаю и парочку бутербродов на работу. А то нужно ведь кому-то за интернет платить

Ответы>>798154

17 Июл, 05:03 #407 #798154

>>798152
отличная идея, щас зазвоню ей, чтобы она с пляжа отвлеклась на моё внимание, блядюка, и выскажу ей: я, сука, сделаю тебе бутер, и не важно когда ты приедешь обратно, всё поняла?

я понял свой путь.

Ответы>>798156

17 Июл, 05:04 #408 #798155

>>798148
А чего ещё забыл спросить:

это ведь похоже на ту фигню с fuzzbuzz или как там его?..

Ответы>>798157

17 Июл, 05:04 #409 #798156

>>798154
Ставлю класс!

17 Июл, 05:06 #410 #798157

>>798155
А не, мне именно через do\while нужно

17 Июл, 05:12 #411 #798158

>>798148
А лол, нельзя что ли два условия ставить?

А можно ли тогда объединить в одно 23<n<0?

17 Июл, 05:25 #412 #798160

>>798148
Короч, эта проблема решилась:

while (n < 0);

Но, мне ведь ещё нужно условие, при котором если n>23 оно возвращает пользователя к вводу числа. Это мне ещё один цикл создавать или как?

Ответы>>798162

17 Июл, 05:33 #413 #798162

>>798160
while (n < 0 || n > 23)

Ответы>>798164

17 Июл, 05:39 #414 #798164

>>798162
Пиздец...

17 Июл, 14:29 #415 #798342

Хочу стать маминым отладчиком. Глава в "Искусстве дизассемблирования" про GDB подойдет для изучения отладки при помощи него? До сих пор использовал GDB только как дизассемблер и трассировщик.

Ответы>>798406

17 Июл, 15:57 #416 #798406

>>798342
Нахуй не нужны мамины отладчики, когда есть всякие valgring и ещё куча различных тулз для неинтерактивного дебага.

Ответы>>798449

17 Июл, 16:39 #417 #798449

>>798406
>valgring
Кук

Ответы>>798453>>798472

17 Июл, 16:42 #418 #798453

>>798449
мексиканский форк

17 Июл, 17:13 #419 #798472

>>798449
Сам ты cuck

17 Июл, 17:20 #420 #798477

>>798127
Классика не пригодна для изучения, давно уже всем известно

Ответы>>798715

17 Июл, 17:33 #421 #798489

Эмм, посоны. Почему этот код при запуске выдает сегфолт? https://ideone.com/j0uz5t
Точнее, GDB показывает, что при записи в секцию кода mov BYTE PTR [ebx+0x7],al программа валится. Видимо, прав доступа нет. А под досом такое легко проворачивалось.

Ответы>>798493>>798500

17 Июл, 17:36 #422 #798493

>>798489
> Видимо, прав доступа нет.
Естественно, нет.

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

Ответы>>798496

17 Июл, 17:38 #423 #798496

>>798493
>Естественно, нет.
То есть надо добавить вызов mprotect?

>Ничего, уже половина каникул прошла, скоро школохацкеры вернутся к урокам
8===3

Ответы>>798497

17 Июл, 17:39 #424 #798497

>>798496
>То есть надо добавить вызов mprotect?
А сам как думаешь?

17 Июл, 17:46 #425 #798500

>>798489
>при записи в секцию кода
>программа валится
>под досом такое легко проворачивалось
https://en.wikipedia.org/wiki/Protection_ring

Ответы>>798503

17 Июл, 17:53 #426 #798503

>>798500
>Protection_ring
А это тут при чём? Он же не в память ядра пытается писать.

Ответы>>798505

17 Июл, 17:54 #427 #798505

>>798503
точно, не подумал

17 Июл, 18:00 #428 #798513

Странно, права на запись не добавились к следующим 40 байтам после точки входа. https://ideone.com/pI0Z0X

В файле i386-unistd.h syscall mprotect имеет номер 226, права PROT_WRITE = 0x02.

17 Июл, 18:13 #429 #798522

Прочитал, что mprotect не добавляет права, а перезаписывает, поэтому надо объединять флаги. Объединил 1 | 2 | 4 и передаю 0x07 как права доступа к памяти. Все равно не работает.

https://ideone.com/DPyrBY

Ответы>>798544

17 Июл, 18:35 #430 #798544

>>798522
errno проверяешь после вызова?
_start выровнен по page boundary?

Ответы>>798549

17 Июл, 18:41 #431 #798549

>>798544
Про выравнивание уже нашел. Выравниваю на ~0xFFF. https://ideone.com/wDjfva

Проверку errno сейчас сделаю. Думал еще, что не тот номер системного вызова использую, потому что вот тут http://asm.sourceforge.net/syscall.html номер mprotect 125, но у меня в файле unistd.h номер именно 226.

17 Июл, 18:44 #432 #798554

Ух ты какую интересную статью про обход защит нашел. Надо сохранить на будущее, а пока разобраться с более простыми сплоитами.

security.cs.rpi.edu/~candej2/user/userland_exploitation.pdf

17 Июл, 18:49 #433 #798559

Strace выдает поток одинаковых ошибок. Что-то ему не нравится в адресе, который я передаю в mprotect.

execve("./a.out", ["./a.out"], [/ 37 vars /]) = 0
mprotect(0x8048000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = -1 ENOMEM (Cannot allocate memory)
execve("/bin/sh", [0x8], [/ 0 vars /]) = -1 EFAULT (Bad address)
mprotect(0x8048000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = -1 ENOMEM (Cannot allocate memory)
execve("/bin/sh", [0x8], [/ 0 vars /]) = -1 EFAULT (Bad address)
mprotect(0x8048000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = -1 ENOMEM (Cannot allocate memory)
execve("/bin/sh", [0x8], [/ 0 vars /]) = -1 EFAULT (Bad address)

Ответы>>798567>>798570>>798575

17 Июл, 18:58 #434 #798567

>>798559
mov eax, 125
mov ebx, _start
and ebx, 0xFFFFF000
mov ecx, 4096

Ответы>>798579

17 Июл, 19:01 #435 #798570

>>798559
И что ты передаёшь вторым аргументом в execve?

Ответы>>798579

17 Июл, 19:06 #436 #798575

>>798559
http://pastebin.com/k6b3LFyp

Ответы>>798594

17 Июл, 19:09 #437 #798579

>>798570
Указатель на имя /bin/sh, заканчивающееся нулем. Третий аргумент - 32-битный ноль.
Вызов mprotect у меня почему-то возвращает -2.
>>798567
Почему именно 125, если у меня в unistd.h вызов mprotect имеет номер 226? А с номером 125 у меня какая-то хуита, которая подвешивает консоль.

Ответы>>798580>>798584>>798588>>798590

17 Июл, 19:11 #438 #798580

>>798579
> Третий аргумент - 32-битный ноль.
Если 0x8 это ноль, то я даже не знаю уже…

17 Июл, 19:14 #439 #798584

>>798579
> подвешивает консоль.
Это как?

Ответы>>798586

17 Июл, 19:16 #440 #798586

>>798584
Как будто ждет ввода, но ничего ввести нельзя.

17 Июл, 19:20 #441 #798588

>>798579
>Почему именно 125, если у меня в unistd.h вызов mprotect имеет номер 226?
В том же asm-generic/unistd.h:
#define __SYSCALL(x, y)

Т.е. это нифига не значит.

17 Июл, 19:23 #442 #798590

>>798579
>unistd.h
x86_64-linux-gnu/asm/unistd_32.h
129:#define __NR_mprotect 125

642 Кб, 552x1024

606 Кб, 520x1024

17 Июл, 19:26 #443 #798592

Итак, под отладчиком у меня шеллкод:
1. Выполнил вызов 125 функции
2. Успешно выполнился код, выводящий errno.
3. Как будто успешно перезаписал данные в секции кода (второй скрин).
Буду трассировать дальше.

Ответы>>798594

17 Июл, 19:27 #444 #798594

>>798592
ХЗ, что там у тебя, это >>798575 у меня запускает /bin/sh

Ответы>>798602

17 Июл, 19:32 #445 #798598

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

Ответы>>798600

17 Июл, 19:32 #446 #798600

>>798598
промах, сорь)

908 Кб, 772x940

17 Июл, 19:33 #447 #798602

>>798594
У меня выполнилось до конца, но шелл не спавнится. Внизу вывод строки, преобразованной после выставления прав доступа к секции кода.

Ответы>>798608>>798609>>798619

28 Кб, 1345x495

17 Июл, 19:37 #448 #798608

>>798602

17 Июл, 19:40 #449 #798609

>>798602
Ебать я лох. Вся проблема в том, что когда перед вызовом execve я настраивал аргументы шелла и окружение, то использовал регистр ebp вместо ebx. Теперь шелл спавнится :3 Пойду писать сплоент на си, это будет просто по сравнению с тем, что было до этого.

http://pastebin.com/UEP1KGyu

Ответы>>798619

17 Июл, 19:56 #450 #798619

>>798602
>>798609
Динуву ломаете?

Ответы>>798664

sage 17 Июл, 21:11 #451 #798664

>>798619
Твою мамку уламываем на отсос.

Ответы>>798689

17 Июл, 21:45 #452 #798689

>>798664
Учим что такое коллбек ты хотел сказать?
Нучокактам рандомизация ап?

17 Июл, 22:15 #453 #798715

>>798477
>давно уже всем известно
Пиздешь.
Обоснуй давай.

Ответы>>798840

17 Июл, 23:57 #454 #798840

>>798715
Классика это скорее краткий фулл-референс в годном изложении, чем учебник. Об этом даже в начале сказано.
Да и упражнения там не то, чтобы сложные, просто непонятно что конкретно от тебя там просят. Ну так было в переводе на русский, английскую я не читал.

Ответы>>798850

18 Июл, 00:08 #455 #798850

>>798840
Мля! А с чего тогда начать, в шапке пособие для гуманитариев
это пойдет?

Ответы>>798852

18 Июл, 00:11 #456 #798852

>>798850
Пока ты выбираешь книгу, мог бы уже начать читать. Что именно - абсолютно похуй.

Ответы>>798869

18 Июл, 00:22 #457 #798869

>>798852
Дак я и начал классику, ну тут пацан вон чет вскукарекнул, а я и поинтересовался, что лучше по его мнению.

Ответы>>798894>>798904

18 Июл, 00:43 #458 #798894

>>798869
Прочитай первые две главы, если все понятно и упражнения получаются, то тогда и дальше читай. Если же нихуя не понятно, то поищи что-нибудь другое

43 Кб, 490x359

18 Июл, 01:01 #459 #798904

>>798869
>пацан вон чет вскукарекнул
Пацаны не кукарекают, а ровно базарят.

Ответы>>798910>>798923

18 Июл, 01:07 #460 #798910

>>798904
Слышал фразу "был пацан и нет пацана..." Вот это про это вот.

18 Июл, 01:48 #461 #798923

>>798904
базарят бабки на базаре, а пацаны ведут речь.

18 Июл, 05:47 #462 #798972

Это опять ваш тупенький дружок.
Короче, какого-то хуя ко мне доебались по поводу скобки во втором принте.
int n;

do
{
printf("Enter the height please: ");
n = GetInt();
}
while (n <= 0 || n > 23);

for (n = 1; n < 23; n++)
{

printf("%i\n" n);

}

error: expected ')'
printf("%i\n" n);

Ну это пиздец, ананасы

Ответы>>798974

18 Июл, 06:03 #463 #798974

>>798972
Ты запятую забыл перед n. Тебе разве гцц (это гцц?) стрелочку не нарисовал в то место, где ошибка?

Ответы>>798975

18 Июл, 06:07 #464 #798975

>>798974
Да, была стрелочка.

Пиздос, перепроверял код несколько раз, в сети смотрел примеры цикла, но проебать запятую - блять.

Ладно, спасибо. В след раз буду внимательней

18 Июл, 07:09 #465 #798985

Кстати, а если я захочу придать переменной вид символа, мне это нужно делать когда я её задаю или уже на выводе? Если на выводе, то как?

Ответы>>798986

18 Июл, 07:10 #466 #798986

>>798985
А теперь перефразируй так, чтобы было хотя бы немного понятно, что такое "вид символа".

Ответы>>798989

18 Июл, 07:14 #467 #798989

>>798986
Ну тип чтоб у меня на выводило энное количество #

Ответы>>798990>>798991

18 Июл, 07:15 #468 #798990

>>798989
на лишнее

18 Июл, 07:17 #469 #798991

>>798989
Все равно нихуя не понятно.
for (size_t i = 0; i < n; ++i) putchar('#');

Ответы>>798993

18 Июл, 07:18 #470 #798992

Тип мне написать
printf("%c\n", i); Где i это char и после этого присвоить переменной значение #

Ответы>>798994

18 Июл, 07:19 #471 #798993

>>798991
О, это уже лучше. Но в walkthrought объясняли чуток по другому. Ну ладно, ща попробуем.

18 Июл, 07:20 #472 #798994

>>798992
Спецификатор %c выводит символ с кодом, который ты передаешь в аргументе. char i = '#' (или int i, похуй) присваивает переменной код символа #. Естественно, сделать это нужно до использования переменной (до вывода), а не после.

Ответы>>798997

18 Июл, 07:24 #473 #798997

>>798994
О, вот то, что мне нужно.
Просто идеально

18 Июл, 07:45 #474 #799004

Блять, только-только было всё норм, теперь вместо хешей - пустое место. Это законно вообще?

Ответы>>799008

18 Июл, 08:02 #475 #799008

>>799004

char i = '#';
for (i = 0; i < n; i++)
{

printf("%c\n", i + 2);

}

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

Ответы>>799012>>799013

18 Июл, 08:09 #476 #799012

>>799008
А если выводить не символами, а числами, то есть %i, и убрать +2, то после того как я задаю n, оно выводит:

0
1
2

ну как бы так и должно быть, но хули нет ебаных решёток?!

18 Июл, 08:09 #477 #799013

>>799008
Ты не понимаешь, что ты делаешь. А делаешь ты вот что: на первой итерации цикла (ты ведь уже читал про циклы? (initialization; check; increment) - вот это все?) ты перезаписываешь i нулем. Потом ты идешь в printf. И печатаешь символ с кодом (i + 2), т.е., 0 + 2 = 2. Это обычно смайлик, но твоя консолька может рисовать вместо него что-то другое. Например, ничего. Потом ты идешь на следующую итерацию, увеличиваешь i на единицу и печатаешь символ с кодом 3. А код символа '#' равен 35, если что.
http://ideone.com/xcfPxz

Ответы>>799015

18 Июл, 08:12 #478 #799015

>>799013

Да, я читал про циклы.

Ох лол. значит мне просто нужно ввести ещё одну переменную, которая будет отвечать за количество этих самых хешей и юзать ещё вмето i в цикле?

Ответы>>799016>>799017

18 Июл, 08:17 #479 #799016

>>799015
А всё, я вроде разобрался

18 Июл, 08:19 #480 #799017

>>799015
У тебя i отвечает за количество строк. Если ты хочешь в каждой строке выводить несколько диезов, тебе нужно считать эти диезы, т.е., тебе нужен вложенный for. Или ты можешь решать на основании какого-нибудь условия, когда тебе втыкать символ новой строки.
http://ideone.com/wYfPA7

Ответы>>799030>>799871

18 Июл, 08:53 #481 #799030

>>799017
Хоть задача состоит у меня в другом - ты дал мне отличный толчок к пониманию, куда идти.

Спасибо

18 Июл, 10:53 #482 #799075

Школьники опять засрали тред своей тупостью.

Ответы>>799498>>799570

18 Июл, 20:00 #483 #799498

>>799075
Не школьники, а нюфажины.

Тред всё равно еле дышит, а так - хоть что-то.
Прояви уважение

18 Июл, 21:23 #484 #799570

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

Ответы>>799573

18 Июл, 21:25 #485 #799573

>>799570
У меня хватало мозгов гуглить и решать проблемы самостоятельно.

Ответы>>799624

18 Июл, 21:30 #486 #799579

мда, быдло захватило тред.

18 Июл, 22:07 #487 #799624

>>799573
Ну сам то привык всё решать самостоятельно, но когда ты вроде делаешь всё правильно, но ничего не выходит - нужно же спросить у кого-то совет.

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

Ответы>>799629

18 Июл, 22:10 #488 #799629

>>799624
а по моему это напоминает задротские интернет форумы, куда ты и можешь съебатся.

Ответы>>799633

18 Июл, 22:13 #489 #799633

>>799629
Если тебя что-то не устраивает - можешь сам валить отсюда. Тебя никто тут не держит.

А мне тут всё нравится, так что по случаю продолжу обращаться за помощью с моментами, которые мне не понятны.

Или ты мне запретишь? Ой как страшно

Ответы>>799677

18 Июл, 22:46 #490 #799677

>>799633
делать мне него, опущенок руками трогать, резвись.

Ответы>>799687

18 Июл, 22:54 #491 #799687

>>799677
Иди, вытри сопельки и успокойся :3

19 Июл, 05:08 #492 #799871

>>799017
А если мне нужно задавать формулу, по которой высчитывается количество хешей, мне нужно её вводить в printf?

Ответы>>799873

19 Июл, 05:13 #493 #799873

>>799871
А всё, я комментарии почитал

341 Кб, 1024x768

19 Июл, 07:31 #494 #799887

Кастовать или не кастовать malloc?

Ответы>>799888

19 Июл, 07:39 #495 #799888

>>799887
Ты не на плюсах пишешь, не нужно.

Ответы>>799889

19 Июл, 07:45 #496 #799889

>>799888
cпасибо

19 Июл, 12:44 #497 #800048

Как хорошо, что есть автоматическое преобразование типов! Теперь то все мы можем вздохнуть с облегчением, правда?

Смерть треда 20 Июл, 23:15 #498 #801698

Чому умер годный тред?

Ответы>>801709>>801736>>801826

20 Июл, 23:30 #499 #801709

>>801698
Школьники из ньюфаг-треда протекли.

Ответы>>801731

20 Июл, 23:56 #500 #801731

>>801709
Чому сразу школьники?

Гумманитарии

# OP 21 Июл, 00:05 #501 #801736

>>801698
Почему вы решили, что он умер? Его, бывало, и с последней страницы бампали. А вообще, все уже обсудили, и теперь просто отвечаем на вопросы ньюфагов.

Ответы>>801778>>801840

21 Июл, 01:58 #502 #801778

>>801736
> вопросы ньюфагов
Табы или пробелы?

Ответы>>801780

# OP 21 Июл, 02:02 #503 #801780

>>801778
Похуй, главное не передумать посередине проекта или, хуже того, исходника.

21 Июл, 03:19 #504 #801798

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

Суть программы состоит в том, чтоб вывести полупирамиду из #. Типа вот так вот:

#
##
###

Компьютер предлагает ввести высоту выводимого объекта. Если пользователь вводит недопустимое число - предлагает ему ввести ещё раз.

{
printf("Enter the height please: ");
n = GetInt();
}
while (n <= 0 || n > 23);

Вторая часть уже занимается выводом ебаной фигуры. Пока что она выглядит так:

int c = '#'; //тут можно было и написать char, но пока оставил так

for (i = 0; i < n; i++)

{

printf("%c\n", c);
//в гайде прямо тут предлагают через принт вывести необходимое количество пробелов, потом хешей ну и переход на новую строку, но не говорят как, да и вообще, там подруга несёт какую-то хуету.
}

Чего я не понимаю, так это как заставить выводить количество #. Конечно, можно сделать по нубскому и прописать if (строка 0) принтф('#') и так далее, пересчитывать каждые варианты.
А если формулой, то количество хешей должно равняться i+1. Индексация же с нуля проводится, да? Знач первая строка = 0, вторая = 1 и т.д. Тогда эта хрень по идее* должна работать, но я в душе не ебу, куда её пристроить, ведь тип там символы, а символ... ну вы поняли меня.

21 Июл, 03:19 #504 #801798

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

Суть программы состоит в том, чтоб вывести полупирамиду из #. Типа вот так вот:

#
##
###

Компьютер предлагает ввести высоту выводимого объекта. Если пользователь вводит недопустимое число - предлагает ему ввести ещё раз.

{
printf("Enter the height please: ");
n = GetInt();
}
while (n <= 0 || n > 23);

Вторая часть уже занимается выводом ебаной фигуры. Пока что она выглядит так:

int c = '#'; //тут можно было и написать char, но пока оставил так

for (i = 0; i < n; i++)

{

printf("%c\n", c);
//в гайде прямо тут предлагают через принт вывести необходимое количество пробелов, потом хешей ну и переход на новую строку, но не говорят как, да и вообще, там подруга несёт какую-то хуету.
}

Чего я не понимаю, так это как заставить выводить количество #. Конечно, можно сделать по нубскому и прописать if (строка 0) принтф('#') и так далее, пересчитывать каждые варианты.
А если формулой, то количество хешей должно равняться i+1. Индексация же с нуля проводится, да? Знач первая строка = 0, вторая = 1 и т.д. Тогда эта хрень по идее* должна работать, но я в душе не ебу, куда её пристроить, ведь тип там символы, а символ... ну вы поняли меня.

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

newfags cant triforce 21 Июл, 03:50 #505 #801802

>>801798
А давай ты код на ideone/pastebin/gist будешь постить или картинкой на худой конец?

> через принт вывести необходимое количество пробелов
От тебя ожидают очевидного: максимальная ширина такой полупирамидки равна ее высоте, т.е., n. Дальше:
- в первой строчке ты выводишь 1 хэш, значит, перед ним должно быть n - 1 пробелов;
- во второй строчке: 2 хэша, значит, перед ним n - 2 пробела
- и т. д.,
Все правильно, количество хэшей i + 1, но зачем тебе делать цикл с нуля, когда ты можешь сделать его сразу с единицы: for (i = 1; i <= n; i++) (заметь, что там <=, потому что в последней строчке тебе нужно i = n хэшей, а если напишешь <, то тело цикла не выполнится, и последняя строчка не выведется). Если цикл с 1, тогда формулы упрощаются, и тебе нужно вывести в каждой строке n - i пробелов, потом i хэшей, потом символ перевода строки.

> в душе не ебу, куда её пристроить
Тебе нужно сделать что-то n раз? Вывести n символов? Используй цикл. Хочешь вывести n строк, в каждой по m символов? Используй цикл до n, а в нем сделай цикл до m. А внутри уже printf или putchar.

Алсо, есть неочевидное решение. У printf в каждом спецификаторе форматирования кроме типа можно задать еще и ширину. Мало того, ширину можно задать динамически: http://ideone.com/iRkJAA (комментарии внутри). Тогда цикл понадобится один, но ты все-таки сделай с двумя а возможно, что и с тремя для начала.

Ответы>>801809

21 Июл, 05:06 #506 #801809

>>801802
Какой же я тупой...

21 Июл, 07:36 #507 #801826

>>801698
Такие как ты дауны его прикончили, своими воплями не по делу.

21 Июл, 07:58 #508 #801830

Как более изящно?
while (anus>0) {
tak?
}
или
while (anus>0)
{
tak?
}

Ответы>>801834

21 Июл, 08:09 #509 #801834

>>801830
Так, как тебе нравится. Главное, не используй гнутый стиль, и с тобой все будет хорошо. Ну и если решишь все же ставить скобки на отдельной строке, заранее подумай, как далеко ты готов зайти (в do {} while, typedef struct {} name и прочих int values[100][2] = { { стоконстант }, { ещестоконстант }}).

Ответы>>801835

21 Июл, 08:19 #510 #801835

>>801834
Погуглил за стили, спасибо

ПЕРЕКАТ # OP 21 Июл, 08:27 #511 #801838

>>801836 (OP)
>>801836 (OP)
>>801836 (OP)

21 Июл, 08:30 #512 #801840

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

Ответы>>802004

sage 21 Июл, 12:27 #513 #802004

>>801840
Можно обсудить новое ключевое слово voidconst: http://ideone.com/FgE0TM и продолжить рисовать кривые елочки вместе с нами.

22 Июл, 13:45 #514 #802723

Хуй а на самом деле бамп

Ответы>>802734

22 Июл, 14:14 #515 #802734

>>802723
Ну бамплимит же, мы в новом треде >>801836 (OP).

Тред утонул или удален.
Это копия, сохраненная 9 августа 2016 года.

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

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

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion