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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
78 Кб, 792x1023
C Programming Language #11 # OP #820659 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Что читать:

- Классика от Отцов: 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/
- https://arhivach.org/thread/188294/
- https://arhivach.org/thread/193780/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #820663
Насру первым.
512 Кб, 960x540
#3 #820708
освещаю
>>820750>>834314
#4 #820718
а что это у нас тут?

стандарт ISO/IEC 9899:1999 - http://libgen.io/ads.php?md5=AE47DE5575CD798E7BB355405B0A2080

стандарт ISO/IEC 9899:2011 - http://libgen.io/ads.php?md5=4CC5C8494FDC76ECB56A927E802FF25E
>>820725>>820751
#5 #820725
>>820718
Спасибо. Но ведь нет никаких значимых различий между последними драфтами и этими pdf?
#6 #820750
>>820708
Что за бомжевское рыло? Наверно, долго сопли и квашенную капусту из бороды выковыривал перед фотканьем.
#7 #820751
>>820718
Bed gaytway
>>820759
sage #8 #820759
>>820751
Все работает. Скажи спасибо провайдеру?
317 Кб, 736x736
#9 #820804
Есть ли в стандартной библиотеке поиск в строке символа из заданного массива символов, или как всегда ручками в цикле?
>>820805
#10 #820805
>>820804
strpbrk()
>>820806
#11 #820806
>>820805
пасиб
#12 #820848
Хочу вкатиться в Pelles C, какие подводные камни?
#13 #820902
>>820848

>какие подводные камни


Pelles C
>>820911
#14 #820903
>>820848

>какие подводные камни?


С
#15 #820911
>>820902
Какие еще есть IDE для си?
>>820917>>820929
#16 #820917
>>820911
вижалстудио, куткреатор, клион, нетбинс, кодеблокс
>>820926
#17 #820926
>>820917
так вижуалстудия поддерживает только С89, а остальные требуют гцц
#18 #820929
>>820931
#19 #820931
>>820929
Я МК не программирую
>>820933
#20 #820933
>>820931
Все так говорят.
>>820940
#21 #820940
>>820933
ну а зачем мне тогда нужен IAR?
#22 #820943
>>820848

> какие подводные камни


Никаких. Для вкатывания самое то, если IDE из комплекта не вызывает отвращения.
>>820954
#23 #820954
>>820943
Хорошо, а вкатываться сразу в C11 или можно K&R читать?
>>820956>>820971
#24 #820956
>>820954
Можно читать K&R, второе издание. Если чего-то вдруг не соберется (Pelles C не любит до-ансишный способ декларации функций), спросишь тут, да и все.
#25 #820971
>>820954
Можешь и в С11, один хуй там разница минимальна.
192 Кб, 612x380
#26 #821577
>>820659 (OP)
Прохожу значит cs50 я и решил выложить код на кодревью, если кому-то захочется покритиковать код, буду очень рад.

Суть кода в том, чтобы залезть в card.raw файл, с которого по заданию были удалены jpg фотки и восстановить их в текущую директорию http://pastebin.com/804RAvLH комментарии есть (первый раз писал комменты реально). Код работает, интересны замечания в реализации.

http://rgho.st/6LtnFPmRJ - исходный файл (если нужно)
#27 #821593
>>821577
Это из четвертого псета? Не буду смотреть чтобы не заспойлерить, я еще не осилил его. Слошна было?
>>821597
#28 #821597
>>821593
Да из 4, первые два задания норм, третье (которое я скинул) довольно напряженное для меня было, байтоебство началось во всей красе.
>>821598
#29 #821598
>>821597
Ну первое то вообще фигня, второе я осилил еле еле, теперь читаю всю доступную литературу, сделал паузу пока. Потом вернусь, переделаю весь сет. Кстати, первое я тоже зафейлил, потмоу что думал что там Дэвид изображен а там рикролл
>>821603>>821607
#30 #821600
Подскажите, почему так?
Запускаю "time ./heapsort < input", показывает 0.106 s, а второй и последующие разы 0.46 s, причем первый раз всегда зависит от размера input, а при повторном запуске время всегда 0.46 s. Можно от этого как-то избавиться? Это типа оптимизации какие-то?
>>821602>>821653
#31 #821602
>>821600
Хотя как-то странно, на 100000 и 1000000 чисел время 0.46 s, а на 1000 0.60 s
#32 #821603
>>821598
Ну да тоже сначала про Девида подумал.
#33 #821607
>>821598
Во втором я на самом деле решение подсмотрел частично, у меня получилось увеличить изображение, но я увеличивал только по длине, а по ширине забывал, в итоге часть пикселей пропадало.
#34 #821609
>>821577

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


Что ты хочешь услышать? Насколько читабельный код или насколько правильно задание сделал? Если первое:
1. #define BUF_SIZE 512 нуу или хотя бы sizeof(buffer) вместо указывания размера при каждом использовании. Да и в целом все константы-имена мог бы и задефайнить.
2. Где блять проверка ошибок вызываемых библиотечных функций?
3. Глобальные переменные в main запихнуть зачем ты вообще решил сделать их глобальными?
4. Не используй sprintf если можно использовать snprintf
5. 99% комментариев не нужны, код и так понятен.
6. (-1 * 512 ) - нахуя так делать?
>>821613
#35 #821613
>>821609
По первым пунктам согласен, а в 6 не понял, а как еще сделать было? -sizeof(buffer)?

> Где блять проверка ошибок вызываемых библиотечных функций?



Это проверка на NULL? Просто еще не очень понимаю суть этих проверок.
>>821616>>821658
#36 #821616
>>821613
Суть в том, что если по каким то причинам fopen вернул нулл, то нужно все прекращать. Ну, так в кусре говорили. Же.
>>821619
#37 #821619
>>821616

Да я вот особо и не понял, зачем это надо, с какого он вообще должен NULL возвращать, если файл на месте?
>>821624
#38 #821624
>>821619
Ну он может быть поврежден например, или формат непонятный, или еще чего. Вобщем, это хорошая привычка
>>821633
#39 #821633
>>821624

Просто после питона непривычно все это.
>>821656
#40 #821653
>>821600
Ты ведь не на ОСРВ запускаешь код, чему удивляешься?
#41 #821656
>>821633
Да нет же, это после быдлокодерства тебе не привычно. В бидоне тоже нужно исключения ловить.
>>821687
#42 #821658
>>821613

>а в 6 не понял, а как еще сделать было? -sizeof(buffer)?


Ну да, ебать, какой смысл добавлять умножение на единицу если нужно просто добавить минус.
>>821687
#43 #821687
>>821658
Ну я хотел сделать более понятно...

>>821656
Ну да наверное.
#44 #821713
вот написал add, авл дерева, и думаю - как же органично. начал писать del - и пиздец, переписал всё без рекурсии. рекурсия не про C.
>>821729
#45 #821729
>>821713

> рекурсия не про C.


Еще бы, стек-то не резиновый.
>>821736
#46 #821736
>>821729
Он нигде не резиновый
>>821744
#47 #821744
>>821736
Ну в лиспе стандартом гарантируется хвостовая оптимизация, например.
>>821768>>821870
#48 #821768
>>821744

>хвостовая оптимизация


где вы блядь такие слова берете?
#49 #821870
>>821744
В схеме. А схема не лисп. В общелиспе это зависит от имплементации, поэтому там сплошная ебля с goto, присыпанная сахарком.
#50 #821916
>>821577
Кроме того, что уже сказали, что за tens/ones, что за нахуй? Кто запретил %02i сделать?
>>821923
#51 #821923
>>821916
Да я так и думал, что можно проще это сделать, слаб в форматировании, где можно почитать про все возможности форматирования строк?
>>821924
#52 #821924
>>821923
В стандарте, в википедии, тут http://www.cplusplus.com/reference/cstdio/printf/ (не смотри на plusplus).
>>821929
15 Кб, 350x262
#53 #821929
>>821924
Спасибо
#54 #821930
>>821577
Код как код...
sage #55 #821932
test
#56 #821972
Нашел книгу дейтелов по С11, стоит ли ее читать? Или K&R лучше?
sage #57 #822004
#58 #822016
>>821993
>>822012
Возьми pthreads, нахуй тебе winapi? Структуру можно создавать в стеке, ты же будешь дожидаться, пока треды не закончат работу (зделоешь join) и не выйдешь до этого из функции.
#59 #822019
>>822018
Говноедствовать интереснее?
#60 #822026
>>822024
Объявить переменную?
#61 #822160
>>822024
Хуле ты свое говно по двум тредам размазал, уебок? https://2ch.hk/pr/res/821402.html#822061 (М)
#62 #822161
>>822024
Алсо ты долбоеб, потому что ты только что форк-бомбу, уоторая даже если не упадет, будет работать медленнее однотредового сорта.
>>822178
#63 #822178
>>822161
только что что?
#64 #822305

> x = (void@@)a ;


> assignment from incompatible pointer type



> x = (void@)a ;


> ...



заебись. x указатель на указатель к опр. структуре. и первый каст видимо дохуя неправильный... каждый раз сгорает от этого.
>>822348>>822350
#65 #822348
>>822305
Что не так? Все правильно же.
#66 #822350
>>822305
Сравни "указатель на что угодно" и "указатель на указать на что угодно". Во втором случае есть конкретный тип, поэтому компилятор и ругается. Вот дереференснешь если - тогда не будет.
>>822403
#67 #822353
Ах указатели
Да на указатели
Прошу сплоеты писать
Пайду в председатели!
#68 #822403
>>822350
бред.

> struct @t = void @t


если это валидно

> struct t @@t = void @@t


то и это должно быть, ведь фактически, это оба void@.
>>822426
#69 #822408
поясните за выражение по типу:

int counter = 0;

char string[10];

string[counter++] = 'a';

Почему 'a' присваивается в string[0], а не string[1]?
>>822411
#70 #822411
>>822408
Потому что надо нормально учить язык и различать count++ и ++count
>>822461
#71 #822426
>>822403
Не бред.
void ∗ - указатель на что угодно. По стандарту, ты можешь без каста присвоить void ∗ любому другому указателю плюс-минус квалификаторы (и обратно).
Грубо говоря, если у тебя указатель на T, и T == void, есть магия. Если у тебя T == int, T == int ∗, T == struct ∗, T == void ∗, T == что-то еще, тогда магии нет.
>>822433>>822483
#72 #822433
>>822426

>void ∗ - указатель на что угодно.


Но void - уже не указатель на что угодно.
>>822467
#73 #822461
>>822411
Пояснишь?
>>822469>>822472
#74 #822467
>>822433

>void ∗∗


фикс
#75 #822469
>>822461
Я не эксперт, но наверное потому, что сперва присвоение, а уже потом постинкремент
#76 #822472
>>822461
Ты ебанутый? Я же написал - разберись, что значит два плюсика перед переменной (преинкремент) и после (постинкремент). Копипасть инфу с книги я не буду, сам найдешь охуели вообще
>>822474
#77 #822474
>>822472
Да уже нашел)
#78 #822483
>>822426
1. ты не хуя не объясняешь, а только путаешь.

2. нахуй ты мне объясняешь стандарт, я и так знаю что такое void@.

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

4. и вообще, если вспомнить asm... короче, плохо.

и ещё, я тут понял для чего нужен + в указании знака числу, чтобы конструкция вида #if (SOMEVER + 0 > 1) работала, даже если SOMEVER не объявлен.
#79 #822538
>>822483

>и ещё, я тут понял для чего нужен + в указании знака числу, чтобы конструкция вида #if (SOMEVER + 0 > 1) работала, даже если SOMEVER не объявлен.


Ну тут ты уже придираешься, препроцессор не должен вместо отсутствующей директивы лепить какого-то хуя 0).
>>822624
#80 #822613
>>822483

> потому что так наглядней и меньше путает


> я не хочу писать


Посоны, я тут гуманитария поймал. Что с ним сделать?
>>822627
#81 #822624
>>822538

> препроцессор не должен


Как раз таки должен. Все имена, которые #if не смог развернуть, он заменяет на литерал 0. Нахуя >>822483 воткнул +0 в #if - совершенно непонятно.
#if (SOMEVER + 0 > 1) развернется в #if (0 + 0 > 1) если SOMEVER не определен, в #if (что-то + 0 > 1), если SOMEVER определен, ну или свалится, если SOMEVER не разворачивается в число или выражение.
>>822631>>822648
#82 #822627
>>822613
Но ведь он прав. Похожая проблема существует даже в более высокоуровневых языках, например, в жабе при работе с дженериками. Там никто никого гуманитариями не обзывает, но по-другому (не с помощью ебли с приведениями типов) красиво решить проблему в языке нельзя.
#83 #822631
>>822624

>он заменяет на литерал 0


Охуеть, я и не знал
#84 #822648
>>822624
да есть такое, но если он не неопределён, а определён без значения - тогда такая конструкция поможет. просто в коде это видел.
#85 #822649
ну в смысле, потому что +0 - легальная конструкция.
#86 #822654
хотя с другой стороны, тоже можно и с -0 сделать. хер короче пойми, пойду я пить водку.
>>822921
#87 #822921
>>822654
Прально, сразу умнее станешьнеа
#88 #822927
Тут есть люди, которые имели опыт работы с i2c на stm32? Не могу понять логику работы с HAL, а спросить не у кого.
85 Кб, 1152x648
#89 #823317
https://ideone.com/iTScte

Попытался реализовать стек, через двусвязный список, все вроде ок компилится и работает, но валгринд ругается, причем не на утечку памяти, а хз на что, посмотри плиз, а то я не вижу явных косяков.
#90 #823318
>>823317

посмотрите

fixed
#91 #823334
Аноны, совсем нубовопрос. Читаю K&R, и хочу спросить, есть такой кусок кода:

printf ("%2d", a)

Он должен выдать "a" в поле из двух позиций, да? Но оно выводит все число, и трехзначное и четырехзначное. Я предполагал, что мне выдаст два первых разряда только. Чего я не понимаю? Ткни носом, анон. Гугл не помог.
>>823338
#92 #823336
>>823317
Как минимум сделай человеческую проверку на ошибки malloc-а. Если malloc в push фейлится, то при pop будет обращение к нулевому указателю, на что, возможно, ругается valgrind. Ну и на счет free:
temp = real_first;

while (real_first != NULL)
{
// ТЫ ТУТ ОСВОБОДИЛ память по указателю temp и real_first
free(temp);
// А ТУТ ТЫ ОБРАЩАЕШЬСЯ К ЭТОЙ ПАМЯТИ. ЕБАНУТЫЙ!
real_first = real_first->next;
temp = real_first;

}
>>823345
#93 #823338
>>823334

> из двух позиций


из МИНИМУМ двух позиций

> два разряда только


Подели или возьми остаток или форматни в строку и сделай %.2s.
>>823358
#94 #823345
>>823336
Да чет с памятью тупанул, там оказалось вообще этот цикл не нужен, а что значит человеческая проверка?
>>823436
#95 #823350
>>823317

Короче понял в чем косяки, он ругается на те строчки, где я сравниваю со значением NULL в циклах while, как это фиксить?
>>823368
#96 #823358
>>823338
Спасибо.
#97 #823368
>>823350
а нахуя ты смотришь через 2 указателся на 114?
>>823378
#98 #823370
Почему Pelles C ругается на устаревшие объявления типа void thread_1() и хочет, чтобы было void thread_1(void)?

Как предписывает стандарт?
>>823371>>823375
#99 #823371
>>823370
старый, да. там что-то про отсутствие контроля за числом аргументов... и только void явно указывал, что нету их.
>>823381
#100 #823375
>>823370

> Почему Pelles C ругается на устаревшие объявления


Потому что они устаревшие.
#101 #823378
>>823368

Уже не помню лол, сделал рефакторинг, ошибки исчезли, какой-то косяк был с временными указателями в функциях.
#102 #823381
>>823371
а может я и путаю, и небыло обязательного правила, и это причуда компилятора, хуй их знает на что они ворнинги выбрасывают, вон, на тот же & без скобочек - только так.
>>823439
#103 #823436
>>823345

>а что значит человеческая проверка?


да в принципе я пересмотрел код, и так сойдет для начала.
Важная ошибка в коде - ты не инициализируешь newptr->next когда делаешь push первого элемента (то бишь когда (first == NULL)), а надо делать newptr->next = NULL.
В целом реализация алгоритма не очень красивая, подумай как лучше сделать
>>823442
#104 #823439
>>823381
Ругается в смысле выбрасывает ворнинги? Если так, то всё правильно делает.

>Что это блять за говно такое этот ваш Pelles C?

#105 #823442
>>823436
Да исправил уже этот косяк, на самом деле только сейчас в курсе начались структуры данных, первый день и это по большей части эксперименты по реализации.

https://ideone.com/TAV3uO вот реализация, valgrind не жалуется, только тут я по типу очереди сделал, удаляет первые элементы, а не последние.

Чувствую с хеш-таблицами будет сложнее...
#106 #823444
это теперь зацени код тренж?

http://pastebin.com/7mSBJVny

Попытался реализовать дерево, авл дерево, все вроде ок компилится и работает, хочу внимания.
#107 #823481
Лол, не заметил надпись "ПЕРЕКАТ!!!". Репощу сюда в легитимный >>823404

Пытаюсь написать интерпретатор/терминал/оболочку (не знаю как назвать) для парочки команд в микроконтроллер, чтобы через последовательный порт можно было заставлять его что-то делать прямым текстом (командами а-ля баш). Пока пишу под ПК на линуксе.
Вопрос следующий: как перехватить стрелочки, чтобы не выводился мусор типа "^[[D", а каретка перемещалась по вводимой строке? Пробовал getchar() и scanf() с одинаковым результатом, но я понятия не имею как предотвратить вывод этого мусора. Остальное я представляю себе как реализовать. Обязательный момент - это использование только функций из страндартной библиотеки.
И, кстати, вводимую строку пишу в массив символов - это нормально так делать или стоит переехать на указатели?
>>823486
#108 #823486
>>823481

> как перехватить стрелочки


> мусор


vt 100 esc sequence

хер знает о чём ты там, <termios.h>. noncanonical.

> использование только функций из страндартной библиотеки


лол, нет)

> И, кстати...


что?
>>823500
#109 #823487
>>820926
ну так сделай визуалку работать с гцц
#110 #823490
>>820926
https://news.ycombinator.com/item?id=9434483
msvs2015 поддерживает c99
>>823494
#111 #823494
>>823490

>поддерживает c99


каждый так говорит, а ты купи розового слона.
#112 #823498
>>820926

>а остальные требуют гцц


А в чем проблема с гцц? Минг же проще ставить, чем гигобайты студии.
#113 #823500
>>823486

> <termios.h>. noncanonical


Ты хочешь сказать что этот хидер неканоничный? Как ни странно, на его включение компилятор под мой контроллер не ругнулся, значит им можно пользоваться. Я попробую.
НО! Посмотрев исходный код fgetc(), я понял, что его вообще не ебёт, что там у меня отображается при вводе, потому что это просто поток символов, который он потом, будучи выполнен несколько раз в цикле, по одному символу проглотит. В таком случае я просто не буду пользоваться стрелками для перемещения каретки - только бекспейс.

> > И, кстати...


> что?


Если не понятно выражаюсь, то здесь я имел в виду, что всё полученное через getchar() я складываю в массив char, чтобы потом использовать. Насколько я знаю, последовательность символов можно строкой записать по указателю. Возможно, я не прав или это совсем аутизм.
#114 #823506
>>823500

>Ты хочешь сказать


>неканоничный


это режим терминала - не каноничный, там ты можешь что хочешь почти. и что такого сложного в этом потоке символов распарсить стрелочки, в esc последовательностях? там делов то, да и есть, наверно, какие-то функции. но стандарт ц тут нипричём.

> то совсем аутизм.


вот ты ещё раз написал, и я снова нихуя не понял.
>>823527
#115 #823510
>>823500

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


Я не понял, ты подключаешь клавиатуру к микроконтроллеру что ли?
>>823527
16 Кб, 561x340
#116 #823527
>>823510
Не совсем. Я пользуюсь Serial Wire Debug JTAGом. Это просто последовательный порт для отладки исполняемой программы в мк, который, в том числе, работает... как терминал, ёпта. Всякие там printf'ы блекджек и шлюхи, всё включено.

>>823506
Я не понимаю слово "распарсить". Я просто хочу, чтобы у меня не было пикрилейтед при вводе с клавиатуры, когда я нажимаю стрелочки. Я хочу чтобы каретка двигалась! Мне теперь кажется, что программа что-то должна сообщить терминалу, чтобы он переключился в необходимый режим, который будет обрабатывать стрелочки как указание передвижения каретки, а не как символы и это будет решением.

> вот ты ещё раз написал, и я снова нихуя не понял.


Ну и хрен с ним. Просто надеялся, что мне подскажут другой (возможно, более удобный или правильный) вариант хранения полученных данных из getchar или scanf, кроме как в массиве типа char для дальнейшей обработки.
>>823546>>826325
#117 #823546
>>823527

>кроме как в массиве типа char


ну а как ты себе это представляешь? может, система сома должна под каждую эвалбл порцию данных выделять кусок памяти и на него выдавать указатель? что тебе хочется то?
>>823557
#118 #823557
>>823546
Хочется сома научиться писать правильный код.
Я слышал про malloc, так что тут можно так и сказать, что она сама лично и будет мне выделять память. И никто иной кроме неё.
Спасибо за терпение и ответы
>>823559
#119 #823559
>>823557

> я ебу тебе мозги


ясн.
#120 #823588
Я новичок, прохожу cs50 и захотел перекатиться на полноценную ide, скачал visual studio 2015, но не понял, как там на си писать, создать пустой проект? И как остановить компиляцию, чтобы прочитать вывод в консоль? Вообще чет в печали, есть ли что-то попроще?
#121 #823593
>>823588
Там должен быть шаблонный hello world. Посмотри хотябы видеоуроки на ютьюбе же!
>>823595
#122 #823595
>>823593
>>823588
А, я только сейчас догнал, что в VS ориентирован на С++. Просто создавай проект для C++ и поменяй расширение файла с .cpp на .c
http://www.swarthmore.edu/NatSci/tali/E15/Visual_C.html
>>823695
#123 #823620
>>823500

> Посмотрев исходный код fgetc(), я понял, что его вообще не ебёт, что там у меня отображается при вводе


Далеко ходишь. Достаточно поискать по pdf-ке стандарта слова типа "консоль" "терминал" или "отображается" (на английском, есс-но), чтобы понять, что C и его стандартная библиотека о таком не знают.

> Вопрос следующий: как перехватить стрелочки, чтобы не выводился мусор типа "^[[D", а каретка перемещалась по вводимой строке?


gnu readline
>>823641
#124 #823641
>>823620

> gnu readline


Спасибо, конечно, но, мне кажется, я не осилю портировать её на микроконтроллер.
Сейчас читаю про termios.h. Похоже, что это то, что нужно, но трудно даже взять в толк что это вообще такое.
Решил пока ограничиться избеганием нажатия стрелок. Моя поделка вряд ли кому-то ещё понадобится, а я могу и потерпеть это безобразие.
#125 #823695
>>823595
Во за гайд спасибо!
#126 #823880
>>823588
visual studio слишком перегружена.
cloud9 для этих целей в самый раз
>>824290
#127 #824056
Пизда потный 5 задачник из cs50, особенно, если за плечами был только курс питона для начинающих.
#128 #824203
Опять вопрос от ньюфага.

Читаю K&R.
Имею кусок кода:

int c;
while ((c = getchar()) != EOF)
putchar (c);

В таком виде программа читает все символы что я ввожу и выводит все в терминал(xterm). При этом, при нажатии Enter, все что я вводил вставляется в новую строку, а писать я начинаю на третьей.

Если убрать скобки вокруг "c = getchar()", то судя по книге программа должна печатать нули либо единицы, но все что меняется у меня - перестает копироваться все что я ввел в строку на новую, при нажатии Enter. При этом, при нажатии EOF, текст становится нестираемым бэкспейсом и лишь при втором его нажатии программа завершает работу.

Обьясните кто-то что происходит. Вряд-ли это из-за эмулятора терминала. Пробовал Sakura и Urxvt - все так-же.
Издание K&R - третье.
#129 #824254
>>824203
компилятор поменяй
#130 #824290
>>823880
б-же мой, да нахуя вам вообще IDE для cs50? Дебилі блять.
>>824291
#131 #824291
>>824290
Не для cs50, а вообще, я на будущее скачал, так как сей замечательный курс уже подходит к концу, эх... и нужно отправляться в свободное плавание по морям it океана.

Надо было в следующем году его проходить, будет версия для очков виртуальной реальности.
>>824509
#132 #824372
>>824370
Деема, ты?
#133 #824508
>>824203
Если ты уберешь скобки то получится
(c = getchar() != EOF) и в этом случае сначала будет выполняться getchar() != EOF, а только после этого c = getchar(), из-за этого так и получается.
>>824516
#134 #824509
>>824291
Как вы его смотрите, его же еще до конца не перевели?
>>824533>>824550
#135 #824516
>>824508
Чегооо? Если убрать скобки, у != приоритет выше, поэтому выполнится getchar() значение сравнится с EOF, результат подвыражения будет 0 или 1, это результат запишется в c, результат выражения будет все тот же 0 или 1, и этот результат уже обработает while. Никаких спецэффектов быть не должно, проблема, скорее всего, в терминале.
#136 #824533
>>824509
Сам то как полагаешь?
>>824591
#137 #824538
Почему диму никак не забанят? Он айпишники меняет?
#138 #824550
>>824509
В оригинале смотрю. Вообще лучше в оригинале смотреть хотя бы с сабами, да и без sections будет сложно под конец.
>>824591
#139 #824576
Что почитать про оптимизацию?
>>824771>>824895
#140 #824578
>>824203

>Если убрать скобки вокруг "c = getchar()", то судя по книге программа должна печатать нули либо единицы


лол, нет. она будет печатать символы с кодом 1, а потом когда будет 0, цикл завершится
#141 #824591
>>824533
>>824550
Русских субтитров нет, поэтому только догадываюсь
>>824607
#142 #824607
>>824591
В такос случае неясно, что ты тут без знаная английского делаешь
>>824672
#143 #824672
>>824607
я знаю английский на уровне прочитать какую-нибудь книгу по программированию, иногда заглядывая в словарь. а в cs50 субтитры идут очень быстро и я не могу сразу прочитать и понять
>>824673
#144 #824673
>>824672
Ну тогда норм, хотя бы задачники в оригинале читай. Перевод от джаварашей в принципе норм, сам первые видео так смотрел, а потом они начали выпускать раз в 2 недели блин.
#145 #824743
Много ли я потеряю, если буду заниматься реверсингом только под линуксом и использовать gcc и clang? Лениво переключаться на другой компьютер со студией.
>>824746
#146 #824746
>>824743
Почти ничего не потеряешь, если устраивает линуксячий софт - radare2 очень даже норм. А компилятор виндовый иногда пригодится (ну там, посмотреть, как он что-нибудь кодогенерит) - рипни его из студии (у них где-то build tools даже отдельно релизились недавно). Чаще всего вайна будет вполне достаточно, но какую-нибудь хитровыебанную защиту без реальной винды ты не снимешь.
#147 #824752
Сап, не могу найти скомпилированный libcurl с OpenSSL, нашел только на Cygwin, но он не работает. Может быть есть альтернативы?
>>824897
#148 #824771
>>824576
Бамп
>>824774
#149 #824774
>>824771
Ничего. Пиши хороший код и не мешай компилятору. Ну криса касперски почитай, ничего особо не поменялось с тех пор.
#150 #824886
Я немного могу в указатели, что мне читать дальше?
>>824894
#151 #824894
>>824886

Делать->дальше = читать
#152 #824895
>>824576
Выставляй static где можно, inline где нужно, не объявляй переменные с типом меньше int если тебе похуй на переполнение и т.п. А вообще, оптимизация - дело мутное и всё придет с опытом.
>>824962
#153 #824897
>>824752
Сам собери.
>>824992
#154 #824962
>>824895
совет уровня ставь пробелы вместо табов. пошёл нахуй
>>824963
#155 #824963
>>824962
Ты - даун?
>>824994
#156 #824991
!(что-то понял) && do = бегом на тучик;

какое охуенно выражение!теперь всегда буду его использовать
>>824994
#157 #824992
>>824897
Вот в том то и проблема!
Я каким-то чудом скомпилил либу без OpenSSL, ну а для компиляции с ссл просто нету нужных заголовочных файлов (я тщательно искал на сайте OpenSSL, там только новые версии)
>>825039
#158 #824994
>>824963
просто иди нахуй, выблядок, и забирай свои маняоптимизации.

>>824991
шутёх))00

пошли вы все нахуй
>>824995>>825034
#159 #824995
>>824994
Поешь говна
#160 #825034
>>824994
Это что блять за петух тут раскукарекался?
#161 #825039
>>824992
И это https://curl.haxx.se/docs/install.html читал?

>(я тщательно искал на сайте OpenSSL, там только новые версии)


Нихуя не понял. Новые версии чего? OpenSSL?
https://github.com/openssl/openssl/releases
>>825078
#162 #825078
>>825039

>И это https://curl.haxx.se/docs/install.html читал?


Естественно.

>https://github.com/openssl/openssl/releases


А вот на гитхабе не шарил.

>Нихуя не понял. Новые версии чего? OpenSSL?


Да. В своих поисках я случайно где-то наткнулся на туториал по компиляции, там кажется нужна была версия 1.0.1d или что-то такое. Полез на сайт, не нашёл нужной версии (1.0.2h скачал, хули), и обосрался при компиляции.
#163 #825815
Кто-нибудь знает, что нужно, чтобы создать виртуальный микрофон на WDK или что почитать по этому поводу?
>>825835
#164 #825835
>>825815
Чужие исходники почитай. Вот, например, первый попавшийся из гугла: https://sourceforge.net/p/virtualaudiopip/virtualaudiopip/ci/c775b372412f6d306d96e09b460593696ebe1927/tree/Virtual Audio Pipeline/adapter.cpp
#165 #825856
>>820659 (OP)
хомяки, посоветуйте, пожалуйста, книгу по сишке, где автор не синтаксис неофитам разжевывает, а подробно рассказывает о особенностях
#166 #825999
>>825856
Удвою, закончил cs50 сишную часть и понял, что не хочу этот язык забрасывать, что дальше читать/учить и чтобы с интересными задачами.
#168 #826046
>>820659 (OP)

>Object-oriented Programming with ANSI-C (Free PDF) - Axel-Tobias Schreiner



А разве в си есть ООП?
>>826052
#169 #826052
>>826046
ООП - это не ключевое слово class, а принципы построения программ.
>>826054>>826060
sage #170 #826054
>>826052
Этот прав.
#171 #826060
>>826052
Понял
#172 #826195
>>825856
Завтра ищешь книгу дайв инту си.
#173 #826325
>>823527
Не страдай хернёй и используй стандартные реализации управление контроллером типа FreeModBus. Если функционала будет нехватать - просто расширь список выполняемых команд.
#174 #826519
Хочу написать хелловорлд через прерывания биоса на си. чтобы совсем не использовать системные вызовы или вызовы библиотеки, а только прерывания. Какие подводные камни?
>>826544
#175 #826544
>>826519
Никаких, но тебе понадобится загрузчик для твоего говнокода или DOS возьми DOSBox.
1580 Кб, 1920x1080
#176 #826579
Любимый ситред
#177 #826594
Хочу портировать STL на чистый си, какие подводные камни?
#178 #826599
>>826594

> STL на чистый си


Дженерики в C11 - полное говно.
>>826604
#179 #826600
>>826594
Заебешься. И получится неюзабельно.
>>826604
#180 #826604
>>826600
>>826599
Я то не всю хочу портировать, а только малую часть, вроде векторов, map, и прочих контейнеров.
>>826612
#181 #826612
>>826604
Все равно основа - шаблоны, а шаблоны в сишечке достижимы только через #define T int #include "mymap.h" #undef T и прочие подобные извращения.
>>826629
#182 #826629
>>826612
А если без шаблонов и под каждый тип - отдельную структуру?
>>826634
#183 #826634
>>826629

> под каждый тип - отдельную структуру?


хех мдаа...
#185 #826641
>>826635

> VS Code


Все равно надо mingw/cygwin использовать для конпеляции и отладки под виндой, так что пока НИНУЖНО.
>>826671>>826693
#186 #826662
>>826594
делают двумя способами:
на *void, но как следствие полностью выключает контроль типов, зато можно передавать через границы бинарных модулей
второй способ - на макросах, это сохранит типизацию, но через бинарные модули уже не перекинуть будет
дополнительно можно сэмулировать variant на структурах и объединениях, минус - типы будут изначально ограничены теми, что есть в variant
еще способ - запилить компонентую инфраструктуру типа com или gobject и поверх этого уже делать обобщенные структуры и алгоритмы
#187 #826671
>>826641
Есть Build Tools от MS, но ты прав, редакторы на HTML не нужны.
>>826681
#188 #826681
>>826671
Sublime text с любым плагином на автокомплит и вперёд.
>>826698
#189 #826693
>>826641
я сегодня весь день аутировал в спеки, поэтому нихуя не понял о чем ты
#190 #826698
>>826681
Все равно тот же функционал, что есть у IDE ни один саблайм не даст
>>826701>>826709
#191 #826701
>>826698
серьёзно, ты пытаешься устроить срач иде против редакторов в си треде?
#192 #826709
>>826698
Ну, именно весь их функционал никто и не использует в 99% случаев. Автодополнение и базовая навигация прикручиваются куда угодно на раз-два (а в сишке большего и не надо при всём желании, разве что дебаггер, который тоже прикручивается), и студию с её 10+ гигами в самой базовой конфигурации и говном размазанным по всей системе ради этого тащить явно не нужно.
>>826723
#193 #826723
>>826709
Рефакторинг? Охуенный отладчик и профилировщик? Инкрементальная конпеляция? Edit & Continue? Без этого всего можно жить, но с этим жить приятнее.
>>826931>>826949
#194 #826931
>>826723

>Рефакторинг


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

>Охуенный отладчик и профилировщик


юзают внешние тулзы

могу сказать, что большего говна чем VS я еще не видел, даже clion не таким уебищем кажется.
#195 #826949
>>826723

>Рефакторинг?


Есть в clang-analyzere, как и автокомплит и навигация. Тулзы есть для всех редакторов.

>Охуенный отладчик и профилировщик?


GDB, valgrind

>Инкрементальная конпеляция?


Voobshe ohuet. Даже мейк это умеет.

>Edit & Continue?


Спорная фича, но gdb умеет код патчить в рантайме.
>>826986
#196 #826970
>>826875
>>826876

> 2016


> Использовать швабодный софт

>>826974>>826975
#197 #826974
>>826970
Только винда, 1С и дельфи!
#198 #826975
>>826970
Но он удобный, хорошо, что в cs50 показали эти ништяки, а то думал, что пределами винды нет жизни, а нет, намного круче все сделать через командную строку, вот!
#199 #826986
>>826949

> gdb умеет код патчить в рантайме.


Ох, как же я проиграл.

Алсо, сравнивать GDB с любым отладчиком, у которого есть GUI, просто неприлично. Именно из-за отсутствия нормального отладчика в мире nix люди до сих пор предпочитают отлаживаться printf-ами. GDB хорош только тем, что он есть везде и для всего, ну и ядро отладить еще.
#200 #827008
>>826986

> у которого есть GUI


у еклипс есть, у куткреатора есть, его к чему угодно можно подключить
#201 #827015
>>826986

>люди до сих пор предпочитают отлаживаться printf-ами


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

>у которого есть GUI, просто неприлично


Гуй для GDB у всех ИДЕ есть, даже у емакса, плюс у самого GDB встроенный текстовый. Да и консольный режим там довольно удобный.
#202 #827118
>>826986

>люди до сих пор предпочитают отлаживаться printf-ами.


Они это делают не из-за того, что с gdb сложно работать, а потому что отладчик - зло, особенно на встраиваемом железе.
#203 #827136
Мамкины филолухи, реквестирую перевод с пидерского, есть либа, с инициализацией:
rt = NewRuntime(1024L);
cx =NewContext(rt, 8192);

как перевести runtime? контекст выполнения это понятно, но рантайм?
#205 #827138
>>827136
з.ы. как 'окружение'?
#206 #827139
>>827136
Мог бы и не скрывать, что речь о JSRuntime идет.
>>827141>>827142
#207 #827140
>>827137
спасибо няша, буду считать
runtime синонимом environment
#208 #827141
>>827139
Дергаю спайдерманки за яйцы, просто JS может ввести в заблуждение
#209 #827142
>>827139

>JSRuntime


з.ы. и да, я по олдстайлу, типа CreateEnvironment
#210 #827682
>>820659 (OP)

> Классика от Отцов:


В чём профит давать ссылку на кривой скан? У меня даже пекарня тормозит при открытии. Неужели в сети нет пдфа с нормальным форматированием?
>>827744>>827771
68 Кб, 625x414
#211 #827705
Чем лучше пользоваться ньюфагу для погромирования контроллеров?
AVR Studio или Bascom-AVR?
#212 #827744
>>827682
Профит в том, чтобы лишний раз послушать нытье
sage #213 #827771
>>827682
Возможно, тебе стоит сменить смотрелку pdf.
>>827795
37 Кб, 703x660
#214 #827773
Что это за хуйня?
Где мне взять этот ATmega8515.DAT?
>>827776
sage #215 #827776
>>827773
Что делает бейсик в этом треде?
>>827778
#216 #827778
>>827776
Мне это в атмегу залить нужно
#217 #827795
>>827771
Нихуя не нужно менять, пдфка - действительно кривой скан, который нужно заменить, в интернетах легко найти нормальную версию.
>>827798
sage #218 #827798
>>827795
Дай ссылку тогда. И удостоверься, что это не одна из многих криво распозанных версий, где l/i/1 перепутаны и некоторых ; нет.

Ну скан-то действительно кривой, но если у него вьювер тупит на том, что без проблем жует суматра на 800Mhz целероне, это повод задуматься.
>>827803
#219 #827803
>>827798
Лень искать, скину книгу в тред когда приду домой. Ну а ты пока проверь вот это http://www.cypress.com/file/56651/download, у меня вроде такая же. Охуенно, книга лежит на официальном сайте Cypress. Это вообще законно?
>>827806
#220 #827806
>>827807
#221 #827807
>>827806
Так це ж английская версия.
>>827811
#222 #827811
>>827807
Во-первых, в ОП-посте тоже английская версия, но в хуевом качестве. Во-вторых, не советую быть тупорылым сишником, который не может в английский ибо это - очень печально.
sage #223 #827815
>>823588

> захотел перекатиться на полноценную ide, скачал visual studio 2015


https://connect.microsoft.com/VisualStudio/feedback/details/506745/visual-studio-2008-c-fatal-error-c1020-unexpected-endif всё, что нужно знать про "полноценную" ide
45 Кб, 600x578
#224 #827829
>>827815

>2008

>>828048
#225 #827832
>>827815
Ну баг, ну добавят диагностику слегка более вменяемую. Это прекомпилированные заголовки - костыль, который создает множество странных проблем и имеет множество ограничений. Ничего удивительного, что если ты хочешь странного и получаешь странное поведение.
>>828051
#226 #827883
>>827815
Так это же 2к8 версия, а сейчас уже 2к15, а то и 15" используется
>>828051
sage #227 #828048
>>827829
Нихуя не поменялось, инфа 100%
Это же Microsoft, там обратная совместимость на первом месте. В том числе и по багам.
>>828051
sage #228 #828051
>>827832

>Ну баг, ну добавят диагностику слегка более вменяемую.


2015-я так же сообщает об unmatched #endif

>>827883
>>828048
#229 #828313
>>820659 (OP)
Вот объясните мне, нахуя нужны в линуксе статические библиотеки? В каких слуаях вообще они используются, если приемущества только у динаических? В инете толком про них не пишут.

Возможно, нубский вопрос. Сегодня начал красноглазить, можете прописчать обряд посвящения.
sage #230 #828342
>>828313
Можешь грузить статически слинкованные бинарники если ФС с [/usr]/lib не подмонтирована.
Впрочем, от этого давно отказались.
#231 #828351
>>828313
закрытый коммерческий код распространяется не только динамически подключаемыми библиотеками, но и статическими библиотеками
#232 #828376
>>828313
а нахуя нужны динамические, от которых одни проблемы?
>>828379
#233 #828379
>>828376
Explain.
>>828388
#234 #828388
>>828379
net, все уже лет как 20 разжевано и объяснено
>>828389>>828558
sage #235 #828389
>>828388
Ты про фриков, пилящих Plan 9?
>>828395
#236 #828395
>>828389
и они в том числе
#237 #828409
>>828402
>>828398
наркоманы, printf %x и %b в Перле все что вам нужно
#238 #828453
>>828421
Не нужно срать в треде бампами и однотипными постами, пожалуйста.
#239 #828458
>>820659 (OP)
В книге с оппоста такое упражнение. Упражнение 1.16. Перепишите main предыдущей программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на её размер. Предыдущая программа из книги: http://ideone.com/wI6z53. Помогите анончики, я озадачен. Пробовал маллоки\риаллоки - ничего не выходит.
>>828461>>828528
#240 #828461
>>828458
>>828458
не сейванул
#include <stdio.h>
#include <stdlib.h>
/ run this program using the console pauser or add your own getch, system("pause") or input loop /
#define SIZE 100

int getline(char s[], int lim){
int c, i;
for(i = 0; i < lim-1 && (c=getchar())!=EOF && c != '\n'; i++){
s=c;
}
if(c=='\n'){
s=c;
++i;
}
s='\0';
return i;
}

void copy(char to[], char from[]){
int i =0;
while((to=from)!='\0') ++i;
}

int main(){
int len;
int max;
char line[SIZE];
char longest[SIZE];
max = 0;
while((len = getline(line, SIZE)) > 0){
if(len > max) {
max = len;
copy(longest, line);
}
}
if(max > 0)
printf("%s", longest);
return 0;
}
#240 #828461
>>828458
>>828458
не сейванул
#include <stdio.h>
#include <stdlib.h>
/ run this program using the console pauser or add your own getch, system("pause") or input loop /
#define SIZE 100

int getline(char s[], int lim){
int c, i;
for(i = 0; i < lim-1 && (c=getchar())!=EOF && c != '\n'; i++){
s=c;
}
if(c=='\n'){
s=c;
++i;
}
s='\0';
return i;
}

void copy(char to[], char from[]){
int i =0;
while((to=from)!='\0') ++i;
}

int main(){
int len;
int max;
char line[SIZE];
char longest[SIZE];
max = 0;
while((len = getline(line, SIZE)) > 0){
if(len > max) {
max = len;
copy(longest, line);
}
}
if(max > 0)
printf("%s", longest);
return 0;
}
#241 #828513
>>828433
На джаве разработку вести гораздо быстрее и легче, чем на С или C++, и это привлекает множество неосиляторов в разработку на этой платформе.
#242 #828528
>>828458
В оригинале это упражнение гласит так:

> Revise the main routine of the longest-line program so it will correctly print the


length of arbitrary long input lines, and as much as possible of the text.

Т.е вроде как надо напечатать ТОЛЬКО ДЛИНУ самой большой строки, а не саму строку
>>828588
#243 #828558
>>828388
Мог бы и объяснить ньюфагу. Если лень, хотя б скажи где читать.
#244 #828586
Господа, можно ли оценить как-нибудь оценить заранее обьекты каких классов требуют реализации move-операторов?

Есть большой проект, и есть идея немного его ускорить, но с чего начинать хз. Может есть какие-то виртуалочки или профайлеры которые смогли бы оценить что в первую очередь требует мув операций?
>>829822
#245 #828588
>>828528

> and as much as possible of the text

>>828651
#246 #828596
>>828410
hexdump
#247 #828651
>>828588
Как ты это реализовывать собрался? Там же предполагается, что читатель еще не знает ни про указатели, ни про realloc
>>828690
#248 #828690
>>828651
Печатать надо length, а текста столько, сколько получится. Звать getline() в цикле, пока введенная строка не закончится на \n (т.е., не будет введена полностью), длины полученных в этом цикле строк складывать, первый кусок хранить. Никаких маллоков и указателей не нужно при такой постановке задания.
#249 #828731
напомните, если гарантия, что размер структуры будет кратен размеру последнего элемента?
>>828735
#250 #828735
>>828731
Нет. По умолчанию оно обычно как-то так и выравнивается, но лучше посмотреть, как в твоем компиляторе указывается выравнивание и указать его явно.
>>828757
#251 #828750
>>828433
просто ещё не сделали лучше. ос на мобилки совсем недавно завезли. впрочем нахуй они нужны сейчас - хер знает. наверное, так на остаточном и двигаются.
#252 #828757
>>828735
чтож, впендюрю _Static_assert . вообще, про компоновку структур в какой главе?
>>828781
#253 #828781
>>828757

> про компоновку структур в какой главе?


По всему стандарту размазано, как обычно. Но вообще, 6.2.6 (Representation of types) и 6.7.2 (Type specifiers).
Алсо, _Static_assert не стоит использовать (как и _Bool, _Complex, _Noreturn и прочие новые имена). Их сделали такими только затем, чтобы не сломать чей-нибудь код своими нововведениями. Подключай <assert.h> и используй нормальный static_assert.
>>829537
#254 #829471
думаю пару высеров протестить на спектруме/сеге, но не очень догоняю как это технически происходит. есть компиляторы, на опр процы - это понятно, но ведь нужно как-то взаимодействовать с системой, адрес памяти и прочее - нужен заголовок, но чисто языком же это нельзя сделать. как это выглядит? я пишу глобальную структуру, и в ключиках компилятора указываю на неё, что тип ставь её в заголовок? или там, компиляторы сами могут в такие заголовки? короче не понятно.
#255 #829537
>>828781

>6.2.6 (Representation of types)


ебанутая конечно глава, не знал что с99 такой битодрочерский.
#256 #829559
в общем, тут статейка небольшая, как собирать под спектрум. но пока нихуя не понял.

http://wischner.blogspot.ru/2014/06/so-you-wanna-be-zx-spectrum-developer.html
http://wischner.blogspot.ru/2014/06/so-you-wanna-be-zx-spectrum-developer_15.html
#257 #829565
>>820659 (OP)
Вопрос по FASM.

Возможно ли более адекватно переместить число с плавающей точкой из [var1] в [var2]? Вот мой говнокод:
fld [var1]
fstp [var2]
>>829829
#258 #829589
всем, конечно, похуй. но вот нормальная статейка: http://www.cpcmania.com/Docs/Programming/Introduction_to_programming_in_SDCC_Compiling_and_testing_a_Hello_World.htm , а прошлая про запуск из под какой-то там ос...
#259 #829609
>>829590

>почему сишечку не заменил


потому что нет компиляторов.
#260 #829706
Использую студию 2015 для компиляции сишного кода. Задал точку входа 0x02000000, но получаю ошибку: "0x02000000" is an invalid value for the "FixedBaseAddress"

Почему так? Как задать нестандартную точку входа, чтобы оставить место ниже?
>>829707>>829709
#261 #829707
>>829706
Не то сказал. Я задал базовый адрес 0x02000000, а не точку входа.
>>829709
#262 #829709
>>829706
>>829707
Разобрался.
Блять, как сделать исполняемый файл не 7 кб, а 1.5? Оптимизатор настроил на уменьшение размера, отключил исключения, смержил секции данных, отключил манифест и стэк канарис, отключил дебаг инфо и убрал релоки.

Как еще можно выебать бинарник?
>>829829
#263 #829712
Сосоны, зачекайте, я тетрис на sdl сделал.
Делал под шиндошсом в mingw, но у красноглазиков может тоже скомпилиться.
У кого запустится/не запустится - отпишитесь.
Вишмастеров нету, бля буду.
http://rgho.st/64H2jkvBg
#264 #829752
>>829712
За музыку лойс
sage #265 #829757
>>829712

> .o .exe вместе с сорцами


Поссал на тебя
>>829812
#266 #829789
>>829712

> я тетрис сделал


ты опоздал на 30 лет
#267 #829812
>>829757
Это специально для виндозников, у которых не стоит gcc.
>>829815
sage #268 #829815
>>829812
Объектники им зачем?
>>829817
#269 #829817
>>829815
от сборки остались же
#270 #829822
>>828586
крестобляди как есть - сами создают себе проблемы а потом героически их преодолевают посредством темплейтной магии, подключения буста и прочей блевоты
#271 #829829
>>829565
Одинарную точность можно вообще таскать обычным mov через обычные регистры. Двойную тоже можно, но уже возникает вопрос, нахуя.

>>829709
Рантайм статический? Возьми дизасм и посмотри, чего там компилятор напихал.
>>829975
#272 #829861
Есть ли смысл постигать ASM с более игрушечных архитектур, а не с 32битой? Или сразу с головой? Или от человека зависит? И нахуя я вообще это спрашиваю, взял да попробовал
>>830171>>830177
#273 #829975
>>829829

>Рантайм статический?


Отключил его. Кстати, если я убрал CRT, и сишные библиотеки теперь не инициализаруются при запуске программы, можно ли использовать функции стандартной библиотеки си, или без рантайма можно использовать только WIN API, в котором и так все нужное есть?
>>829994
#274 #829994
>>829975

> можно ли использовать функции стандартной библиотеки си


Как ты сам сказал, они не инициализируются, поэтому не стоит. Если очень хочется, можно сходить в дизасм и исходники CRT и посмотреть, чему нужна инициализация, а чем нет. Но зачем тебе вообще этот дроч на размер?
>>830002
#275 #830002
>>829994

>CRT и посмотреть, чему нужна инициализация


а чего там инициализируется то? хотя-бы примерно.

и понятно, это же по идее, зависит от реализации, как и что будет инициализироваться, и что вы там собрались вручную делать тогда?
>>830013
#276 #830013
>>830002
Куча, локаль (ctype, в частности), stdint/stdout/stderr, tls.

> зависит от реализации


Да, даже от конкретной версии библиотеки. Но можно проверить, например, что memcpy не требует (или требует, например, если копирует через SSE) инициализации.

> что вы там собрались вручную делать тогда


Я вообще не понимаю, нахуя анону это нужно. Бинарники до метра даже для хелловорлда норм.
>>830023>>830228
#277 #830023
>>830013
может он хочет максимально минимализировать чтобы выиграть в спец олимпиаде, но тогда, наверно, нужно основу написать на ассемблере, а остальное линковать из ц/чегоещё. или как?
#278 #830057
void
reverse(char str[], int size){
int right = size - 2;
int left;
int el;

for(left = 0; left != right || left + 1 != right; right--, left++){
el = str[left];
str[left] = str[right];
str[right] = el;
}
str[size+1]='\0';
printf("%s", str);
}

int
main(void){
char string[100];
int stream, index = 0;

while((stream = getchar())!=EOF){
if(stream == '\n') {
string[index++] = stream;
break;
}
string[index] = stream;
index++;
}

reverse(string, index);

return 0;
}

возникает ошибка при любом вводе в строчке el = str[left]; разобраться в чем проблема не могу уже 2-й час. когда дебажу выдает sigsegv, то есть я обращаюсь к несуществующему месту.
#278 #830057
void
reverse(char str[], int size){
int right = size - 2;
int left;
int el;

for(left = 0; left != right || left + 1 != right; right--, left++){
el = str[left];
str[left] = str[right];
str[right] = el;
}
str[size+1]='\0';
printf("%s", str);
}

int
main(void){
char string[100];
int stream, index = 0;

while((stream = getchar())!=EOF){
if(stream == '\n') {
string[index++] = stream;
break;
}
string[index] = stream;
index++;
}

reverse(string, index);

return 0;
}

возникает ошибка при любом вводе в строчке el = str[left]; разобраться в чем проблема не могу уже 2-й час. когда дебажу выдает sigsegv, то есть я обращаюсь к несуществующему месту.
>>830280
#279 #830171
>>829861

>Есть ли смысл постигать ASM с более игрушечных архитектур, а не с 32битой


как появится время, очень хочу вкатится в arm, купить миникампутер за $10 и исследовать эту божественную архитектуру с запилом своей ос. x86 считаю сраным уебищем не достойным благородного дона.
>>830273
#280 #830177
>>829861

>Есть ли смысл постигать ASM с более игрушечных архитектур, а не с 32битой?


Его и есть смысл постигать ТОЛЬКО для игрушечных архитектур если ты не собираешься заниматься реверс инжинирингом или ковыряться в ведре.
>>830179>>830274
#281 #830179
>>830177

>ковыряться в ведре.



Речь об андроиде?
>>830181
#282 #830181
>>830179
Ядро любой ОС да и там в большинстве случаев тебе редко нужно будет что-либо писать на ассемблере, но его знания все-равно не помешают.
>>830195
#283 #830195
>>830181
А, понятно
#284 #830216
Что, кто-то до сих пор на этом динозавре - "С" программирует?

До первой отсутствующей библиотеки, наверное.

Мама, смотри скорее? я драйвер к своей Ардуино-машинке написал в свои 30 лет, теперь я крутой кулцхакер, божешь ты мой.

Ладно хоть среди вас нет мудаков, которые учат АСМ и Аду.

Через 5 лет, когда Линус уйдёт из проекта, Linux перепишут на плюсах.
>>830218>>830242
#285 #830218
>>830216
слишком толсто попробуйте потоньше
>>830227
#286 #830227
>>830218
посоны, а на моём 386 си пойдёт?
>>830304
#287 #830228
>>830013

>Я вообще не понимаю, нахуя анону это нужно


>маленький размер


>win api


Кажется, я догадался, чего хочет тот анон. Поесть говна
#288 #830242
>>830216
говноед уходи
>>830253
#289 #830253
>>830242
тут половина мои посты, раньше никто не жаловался
>>830300
#290 #830273
>>830171
Благородный дон может интересоваться арм как хобби, это и вправду интересно, никто благородному дону препон чинить не будет
>>830299
#291 #830274
>>830177
Ну тогда мне он не особо нужен. Хотя я с прицелом как раз на RE и ковыряние, и видел сайт CTF подобный, где играешься с MIPS архитектурой
#292 #830280
>>830057

> left != right || left + 1 != right


Попробуй прогнать свой цикл в уме на строке из двух символов тебе нужно было всего лишь сказать left < right.
>>830293>>830762
#293 #830293
>>830280
right > left
>>830345
#294 #830299
>>830273
как хобби и как большие перспективы, теже смартфоны например, да что уж, весь эмбедед. запил мобильной ос под опен мобил пхоне, а? а? этоже охуенчик.
>>830310>>830363
#295 #830300
>>830253
теперь ты можешь уходить
#296 #830304
>>830227

>да что уж, весь эмбедед.


Смею тебя разочаровать, но с ассемблером сейчас ебутся только упоротые пердуинщики и бородатые дядьки на проектах 30-летней давности.
#297 #830309
>>830304
я бородатый дядька и я хочу ебаться с асмом на арм, не. ну как ебаться, в пределах ядра ос, не более.
>>830311
#298 #830310
>>830304
>>830299
Промахнулся
#299 #830311
>>830309
Ну ебись, жи, нито же не говорит, что это плохо.
>>830315
#300 #830315
>>830311
вот этот чета >>830304 выебуется
424 Кб, 838x1200
C Primier Plus #301 #830330
Двач хочу купить пикрил. Стоит ли?
>>830334>>830364
#302 #830334
>>830330
это не читал, но прата ахуенен
#303 #830345
>>830293
Там условие продолжение цикла, а не прекращения.
#304 #830363
>>830299
Да, ты прав. И в сфере ИБ опять же есть что ловить
#305 #830364
>>830330
Покупай, мне очень понравилась книга
#306 #830442
Можно ли настроить репозиторий на гитхабе так, чтобы его нельзя было найти по ключевым словам?
>>830445
#307 #830443
>>830304
Ардуино же на сишке не?
>>830447
#308 #830445
>>830442
Зачем? Для личных проектов есть щитбакет битбакет.
#309 #830447
>>830443
ядро да, а сверху обмазано движком явы, который тоже на с, сверху уже ява
>>830460
2 Кб, 150x110
#310 #830451
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms680341(v=vs.85).aspx

Для чего здесь union? Выглядит так, как будто PhysicalAddress и VirtualSize - два отдельных поля с разными значениями, к которым можно обращаться, но union работает как на пикче: то есть одни и те же данные могут интерпретироваться как char или как int.
>>830536
#311 #830460
>>830447
Ты не про андроид говоришь? Ардуино же это просто микроконтроллер с приблудами
>>830468
#312 #830468
>>830460
ну дя, там полноценный линух стоит
#313 #830519
Какие еще арм? У вас что, есть настроение заниматься этим без тяночки?
>>830545>>831000
#314 #830536
>>830451
Не обращай внимания, особенности спеки. Вариант .Misc.PhysicalAddr не используется, и в 100% случаев тебя будет интересовать .Misc.VirtualSize.
#315 #830545
>>830519
тянучки нинужны
#316 #830762
>>830280
sudo cat /dev/null > *
111 Кб, 1681x1050
#317 #830949
у меня таки получилось. еле сделал, оказывается что сборщиков в tap под лялихом нет - и по итогу пердюлил в память через эмулятор, и из интерпретатора прыгал в память. а ещё у меня не работают глобальный переменные, но константные прокатили. ну не умею я в сегменты, или что там надо в crt0.s... а может это код инициализации нужно написать...
#318 #831000
>>830519
ю кэн ду зис айзер виз йо арм ор виз йо герл
MINGW vs MSVC #319 #831058
Ставлю QtCreator для программирования на няшной. Что будет лучше для этого mingw ли msvc?
>>831060
#320 #831060
>>831058
mingw ставь, там пердолиться можно
>>831062>>831097
#321 #831062
>>831060
А может вместо Qt поставить VS?
>>831064
#322 #831064
>>831062
не соси хуй мелкософту, братан
>>831097
#323 #831097
>>831060
>>831064
Я решил что мне нужен С11, а он есть только в MinGW?
>>831100
#324 #831100
>>831097
В mingw он точно есть, насчёт остального не ебу.
#325 #831290
Подскажите, пожалуйста. Должен добавляться символ в массив.

char params[11];

Так работает:

char buffer2;
buffer2 = (mode & 0x100) ? "r" : "-";
param[0] =
buffer2;

но так нет:
param[0] = (char*)((mode & 0x100) ? "r" : "-");

т.е. работает через буфер, но как сделать чтобы его не было?
>>831292>>831293
#326 #831292
>>831290
Символы в одинарных кавычках.
>>831296
#327 #831293
>>831290
звездочки пропали заменю на "@".
char params[11];

Так работает:

char @buffer2;
buffer2 = (mode & 0x100) ? "r" : "-";
param[0] = @buffer2;

но так нет:
param[0] = (char@)((mode & 0x100) ? "r" : "-");

т.е. работает через буфер, но как сделать чтобы его не было?
>>831294
#328 #831294
>>831293
Оно не должно работать в обоих случаях. Ты пишешь младший байт адреса строки в param[0], это вряд ли то, чего ты хочешь. Алсо, компилируй с -Wall /W2 или как там у тебя предупреждения включаются, тогда компилятор сразу пояснит тебе, что ты не прав.
>>831296>>831297
#329 #831296
>>831292
Спасибо за оперативный ответ!
>>831294
Но так работает же:
params[0] = (mode & 0x100) ? 'r' : '-';
>>831297>>831306
#330 #831297
>>831296
>>831294
Ну, и первый случай тоже работал.
#331 #831306
>>831296
Именно так и должно работать. 'r' - один char, содержащий код символа r. "r" - адрес массива символов, и сработать такое могло лишь случайно (ну или разве что вот так *((mode & 0x100) ? "r" : "-")).
>>831374
#332 #831374
>>831306
Теперь понял разницу. Спасибо.
#333 #831436
Двощ, помоги.
Хочу скопировать один массив в другой но на выходе получаю херню.
Что я делаю не так?
http://ideone.com/wCjW9s
>>831447
#334 #831447
>>831436
У тебя len 3, значит он копирует только 3 байта. Нужно 12
#335 #831613
>>820659 (OP)
Есть вопрос.
Функция выводит херню из списка (в задании, сказано, есть ошибка):

char ✱item_data(const list_t ✱list)
{
char buf[12];
sprintf(buf, "%d", list->data);
return buf;
}

Почитал инет, там советуют:
http://stackoverflow.com/questions/12380758/c-error-function-returns-address-of-local-variable

Т.е. для Buf выделить память.
char buf = malloc (sizeof (char) 12);

Дальше там говорится как только не нужна buf - выполни free().

>Also note that, it is a good practice that after you have done with the allocated memory block, free it to save from memory leaks. Once you free the memory, you can't access that block again.


А как его очистить-то если я ушел уже оттуда? И где-то посреди кода возвратил пару раз item_data?
>>831616>>831617
#336 #831616
>>831613
Так это вызывающий должен делать free, не ты. То есть, он зделол data = item_data(somelist); do_something_with(data); ну и делает free(data) потом, когда data ему больше не нужно. Можешь free() обернуть в какое-нибудь item_data_free(), это во-первых, избавит пользователя от раздумий, как очищать (и надо ли), во-вторых, позволит перекатиться с дефолтовой кучи на что-то кастомное, а в-третьих, позволит тебе делать какую-нибудь очистку, если data - не просто массив байтов, а какая-нибудь сложная структура.
sage #337 #831617
>>831613
Алсо, передай тому, кто научил тебя писать list_t, что он мудак.
>>831628
#338 #831626
Господа, вот таким кодом я заменил функции memcpy и memset, которые вызывает компилятор: https://ideone.com/JDATly

Я выкинул CRT и уменьшил бинарник до 1.5 кб. Главный файл выглядит так: https://ideone.com/gKkKLF

Функции memset и memcpy определены в win32_crt_memory.h. Этот файл подключен в хедере pe_inject.h. Хедер pe_inject.h подключен в main.cpp. Я получил ошибку:

pe_inject.obj : error LNK2005: _memcpy already defined in main.obj
1>pe_inject.obj : error LNK2005: _memset already defined in main.obj
1>fatal error LNK1169: one or more multiply defined symbols found

В чем тут проблема? Почему функции УЖЕ ОПРЕДЕЛЕНЫ, если я использовал #pragma once или хедер гвард?
>>831631
#339 #831628
>>831617
Ну, извините, задание такое дали.
typedef struct list_s
{
struct list_s✱ next;
int data;
} list_t;
Вот этот мужик еще рассказывает почему так надо делать.
https://www.youtube.com/watch?v=XmuZ_U_GLYY

Ну, или объясни ты, почему так нельзя?
А то 1000 мнений вокруг и все правильные.

Вот смотри, по поводу free.
вот я сделал функцию, например.
char ✱item_data(const list_t ✱list)
{
char ✱buf = malloc (sizeof (char) ✱ 12);
sprintf(buf, "%d", list->data);
return buf;
}
как мне сделать так чтобы она и возвращала, и очищалась?
Я вот этого не пойму.
Ну пример я возвратил, да? Т.е. ложить(или класть, хз) в переменную и вместе с переменной его free?
Т.е. на живом примере:
char✱ data = item_data(head);
printf("text %s \r\n\r\n", data);
free(data);
Это и всё?
#339 #831628
>>831617
Ну, извините, задание такое дали.
typedef struct list_s
{
struct list_s✱ next;
int data;
} list_t;
Вот этот мужик еще рассказывает почему так надо делать.
https://www.youtube.com/watch?v=XmuZ_U_GLYY

Ну, или объясни ты, почему так нельзя?
А то 1000 мнений вокруг и все правильные.

Вот смотри, по поводу free.
вот я сделал функцию, например.
char ✱item_data(const list_t ✱list)
{
char ✱buf = malloc (sizeof (char) ✱ 12);
sprintf(buf, "%d", list->data);
return buf;
}
как мне сделать так чтобы она и возвращала, и очищалась?
Я вот этого не пойму.
Ну пример я возвратил, да? Т.е. ложить(или класть, хз) в переменную и вместе с переменной его free?
Т.е. на живом примере:
char✱ data = item_data(head);
printf("text %s \r\n\r\n", data);
free(data);
Это и всё?
>>831633
#340 #831631
>>831626

> Ну, или объясни ты, почему так нельзя?


Потому что _t зарезервированный суффикс в POSIX, но на это похуй. А на что не похуй, так это на то, что: 1) есть IDE, которые тебе и так скажут, чем является идентификатор; 2) переменную от типа можно отличить по контексту, нет смысла повторять это в имени (посмотри сюда http://ideone.com/u7ifNQ ).

> как мне сделать так чтобы она и возвращала, и очищалась?


Вот у тебя в конце поста все правильно сделано.

>>831626
Покажи, как компилируешь и линкуешь?
#341 #831633
>>831628

> Ну, или объясни ты, почему так нельзя?


всё можно, всегда так делаю.

> Это и всё?


ну вариантов есть несколько, или вот так, по кривому, или передавать уже выделенную тобой память в функцию, и тут 2 варианта, если размер не высчитывается до рантайма: сделать функцию которая вернёт необходимое число памяти, либо передавать указатель на память вместе с размером, и если в функции не хватит - возвратить ошибку.
>>831645>>831652
#342 #831638
>>831631

> pe_inject.h


осторожна с хакиром.
#343 #831639
>>831631

>Покажи, как компилируешь и линкуешь?


Блять, из какого файла проекта выдирать эти опции? Ладно, перечислю, что я настроил:

Оптимизация: O1

Code generation:
Отключены исключения C++
Security Check: disable

Линкер:
Отключил манифест
Отключил дебаг инфо
Точка входа WinMain
Randomize Base Address выключил

Конфиг
https://ideone.com/Jq0W1w
>>831640>>831644
#344 #831640
>>831639
иди ты нахуй, короч)
>>831643
39 Кб, 800x450
#345 #831643
#346 #831644
>>831639
Если это студия, там в свойствах проекта можно командную строку результирующую посмотреть. Где nodefaultlib (/Zl) у компилятора? Где выключенный инлайн (/Ob0 вроде)? И оптимизации временно выключи.
>>831646>>831656
#347 #831645
>>831633
>>831631
Говорите оба полные противоположности друг другу, но ладно, всё приму к сведению, и буду искать лучший вариант. Спасибо!
>>831647
sage #348 #831646
>>831644
Не заметил проект. Вот <IntrinsicFunctions>true</IntrinsicFunctions> еще.
#349 #831647
>>831645

>противоположности друг другу


нет. просто в твоём варианте меньше гибкости, ведь если ты передаёшь память, то она может быть много чем и где угодно, и даже тупо, можно переиспользовать.
>>831652>>831653
#350 #831652
>>831647
Он про суффиксы у типов, наверное. А что касается item_data - да, тут >>831633 ты все правильно расписал.
>>831655
#351 #831653
>>831647

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


Т.е. если я передам выделенную память в функцию, как же её тогда потом очистить, например я напрямую передал в printf? Или нужно сделать функцию с printf и в ней же в конце по указателю выполнять free?
Я правильно понимаю что если был выполнен malloc, то дальше для высвобождения памяти используется только free, "само" ничего не будет?
#352 #831655
>>831652

>Он про суффиксы у типов, наверное.


Да, про них в большей степени, но и как бы ты говоришь что "так правильно", а он говорит "вариант кривой".
>>831661
#353 #831656
>>831644

>Где nodefaultlib (/Zl) у компилятора? Где выключенный инлайн (/Ob0 вроде)? И оптимизации временно выключи


Сделал.

>Вот<IntrinsicFunctions>true</IntrinsicFunctions> еще


Выставил false. Ошибка та же самая.

https://ideone.com/12zlSO
>>831661
#354 #831661
>>831656
А, так у тебя два файла: main.cpp и pe_inject.cpp #pragma once влияет на тот файл, куда подключен хедер (т.е., хедер #include-ится не более одного раза). Твои два .cpp компилируются в два .obj, и из обоих торчат одинаковые функции. Линкер про препроцессор и #pragma once не знает вообще ничего. Сделай функции static (inline?), или вынеси в mylib.cpp, а в хедере оставь только декларации.

>>831655
Кривой вариант - это он про выделение памяти в функции. То есть, можно:
char ✱item_data(const list_t ✱list)
{
char ✱buf = malloc (sizeof(char) ✱ 12);
sprintf(buf, "%d", list->data);
return buf;
}

char ✱data = item_data(list);
printf("%s\n", data);
free(data);

а можно

void item_data(const list_t ✱list, char ✱dest, size_t length)
{
snprintf(dest, length, "%d", list->data);
}

char buffer[12];
item_data(list, buffer, sizeof(buffer));
printf("%s\n", buffer);

Второй вариант более гибкий, и позволяет, например, не дергать кучу по пустякам. А вот если ты не знаешь, какое максимальное количество данных item_data может вернуть, или это количество очень сильно варьируется, то можно использовать первый вариант с выделением памяти из кучи внутри функции item_data.
#354 #831661
>>831656
А, так у тебя два файла: main.cpp и pe_inject.cpp #pragma once влияет на тот файл, куда подключен хедер (т.е., хедер #include-ится не более одного раза). Твои два .cpp компилируются в два .obj, и из обоих торчат одинаковые функции. Линкер про препроцессор и #pragma once не знает вообще ничего. Сделай функции static (inline?), или вынеси в mylib.cpp, а в хедере оставь только декларации.

>>831655
Кривой вариант - это он про выделение памяти в функции. То есть, можно:
char ✱item_data(const list_t ✱list)
{
char ✱buf = malloc (sizeof(char) ✱ 12);
sprintf(buf, "%d", list->data);
return buf;
}

char ✱data = item_data(list);
printf("%s\n", data);
free(data);

а можно

void item_data(const list_t ✱list, char ✱dest, size_t length)
{
snprintf(dest, length, "%d", list->data);
}

char buffer[12];
item_data(list, buffer, sizeof(buffer));
printf("%s\n", buffer);

Второй вариант более гибкий, и позволяет, например, не дергать кучу по пустякам. А вот если ты не знаешь, какое максимальное количество данных item_data может вернуть, или это количество очень сильно варьируется, то можно использовать первый вариант с выделением памяти из кучи внутри функции item_data.
>>831666
#355 #831666
>>831661
Понял, спасибо за подробное разъяснение!
#356 #832388
Опять я пришел со своими списками, подскажите, правильно ли я делаю?
void remove_next_from_list(list_t item) {
list_t
tempList = item->next; //создаем промежуточное звено
if (item->next) { //если есть следующий элемент
item->next = item->next->next; //замещаем
free(tempList); //старый удаляем

}
}

было так:

void remove_next_from_list(list_t *item) {
if (item->next) {
free(item->next);
item->next = item->next->next;
}
}
>>832389
#357 #832389
>>832388
Опять я пришел со своими списками, подскажите, правильно ли я делаю?
void remove_next_from_list(list_t ✱item) {
list_t ✱tempList = item->next; //создаем промежуточное звено
if (item->next) { //если есть следующий элемент
item->next = item->next->next; //замещаем
free(tempList); //старый удаляем

}
}

было так:

void remove_next_from_list(list_t ✱item) {
if (item->next) {
free(item->next);
item->next = item->next->next;
}
}

Блин, забываю про эти звездочки.
>>832393
#358 #832393
>>832389
Все правильно, только ты не создаешь промежуточное звено, а просто запоминаешь указатель на удаляемый элемент.
>>832481
#359 #832481
>>832393
Понял, спасибо.
#360 #832927
Няши-сисяши, реквестирую годный справочник по стандартной библиотеке с поиском и примерами типа -> http://www.cplusplus.com/
>>832932
#361 #832932
>>832927
Во-первых, для сишечки тоже можно читать по твоей ссылке (stdio.h -> cstdio и т. п.). Во-вторых, есть всякие dash и zeal, хоть там и нет примеров.
>>832944
#362 #832944
>>832932
после того, как я не нашел strcasecmp, мне этот ресурс показался пидерским.
>>832962
#363 #832962
>>832944

> не нашел strcasecmp


Это все потому, что в Си внезапно нет strcasecmp. Она из посих.
>>832969
#364 #832969
>>832962

>Она из посих


ебанутся и чо теперь, в какомнибуть микросовтовской поставке ее может не быть?
>>832987
36 Кб, 1029x523
4 Кб, 750x71
#365 #832987
>>832969

> ее может не быть?


Может и не быть. Выбор за тобой.
>>833002>>833049
#366 #833002
>>832987
strings.h жеж
#367 #833006
з.ы. у мелкопидоров как всегда, лол:

#if defined(_WIN32) || defined(_WIN64)
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#endif
>>833021>>833023
#368 #833021
>>833006
И в чем лол?
>>833039
#369 #833023
>>833006

> у мелкопидоров как всегда


Что, серьезно? Пидоры! Насколько я помню, их _snprintf отличается поведением! Это в какой версии так? Затести, пожалуйста, вот это: http://ideone.com/mmzxxF
>>833046
#370 #833039
>>833021
_свойособенныйпуть
>>833049
#371 #833046
>>833023

>Насколько я помню, их _snprintf отличается поведением


это был тогда не микрософт, если бы не отличался поведением. у них там свой мир, кек
#372 #833049
>>833039
Этот путь явно описан в стандарте: негоже компилятору засорять своими именами стандартные хедеры. А вот с префиксом _ можно. И даже >>832987 гцц, если его попросить работать по стандарту, без GNU-говна, знает про это.
>>833163
#373 #833159
Нужно рекурсивно обойти каталоги и вызвать некоторую функцию для каждого файла. Можно ли сделать это без CRT при помощи функций сишкой библиотеки, или надо использовать только вин апи? Стоит ли для ускорения запускать обход в несколько потоков?

По-моему, многопоточность это какая-то хуита, если только каждый тред не выполняется отдельным ядром. Если это не так, треды будут просто отрабатываться по мере их выталкивания из системной очереди со скоростью работы однопоточного приложения.
>>833166>>833171
#374 #833163
>>833049
давай еще вЕрбЛюдОсТайЛ потащим в стандартную либу
#375 #833166
>>833159
readdir и прочие из POSIX, но как видишь у мелкопидоров свой путь.
#376 #833171
>>833159

> без CRT при помощи функций сишкой библиотеки


Поделил на ноль.

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


Один тред может ожидать IO. В это время другой может обрабатывать данные.
#377 #833180
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa364428(v=vs.85).aspx

Как эта функция работает? Если возвращается BOOL, то как можно различать ненулевые значения? У меня сравнение с ERROR_NO_MORE_FILES вообще выдает ошибку "несовместимый тип".

Return value

If the function succeeds, the return value is nonzero and the lpFindFileData parameter contains information about the next file or directory found.

If the function fails, the return value is zero and the contents of lpFindFileData are indeterminate. To get extended error information, call the GetLastError function.

If the function fails because no more matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.
>>833181>>833182
sage #378 #833181
>>833180

>Если возвращается BOOL, то как можно различать ненулевые значения?


Ненужно различать, всё, что не ноль — истина.

> У меня сравнение с ERROR_NO_MORE_FILES вообще выдает ошибку "несовместимый тип".


Потому что ERROR_NO_MORE_FILES возвращает функция GetLastError()
#379 #833182
>>833180
Забей на ERROR_NO_MORE_FILES. Тебе ли не похуй, почему оно тебе не хочет больше файлов выдавать?
11 Кб, 549x65
#380 #833333
Я конечно понимаю что я ахуел, но поясните пожалуйста задание пикрелейтед. Строки из пробелов значит что надо печатать только пробелы?
#381 #833335
>>833333
Ну вот смотри, у тебя есть примерно такой текст: http://ideone.com/jkT4kG, в нем текст отформатирован пробелами. Твоя задача - "сжать" его таким образом, чтобы он занимал меньше байтов, но выглядел точно так же. Т.е., второе слово в первой строке начинается в позиции 9 (считая с 1), и, если ширина одного символа табуляции = 8, то четыре пробела вторым словом можно заменить на один '\t'. И так далее. Ищешь табстопы, втыкаешь табы. Печатать надо сначала входной текст, а потом получившийся текст, чтобы убедиться, что они выглядят абсолютно идентично. Ну и счетчик сэкономленных байтиков заведи до кучи.
#382 #833338
>>833333

> заменять пробелы смесью табов и пробелов


Нет, спасибо.
>>833339
#383 #833339
>>833338
Это учебное задание, хотя во времена DOS некоторые такое извращение практиковали.
#384 #833455
>>833333
похоже на задание из рассейского вузика, такое же ебануто-беспощадное. автор то и не знает, что таб может и как 1500 пробелов отображаться
>>833476
sage #385 #833476
>>833455

>автор то и не знает, что таб может и как 1500 пробелов отображаться


Автор знает. А вот ты ещё читать не научился, а уже тявкаешь тут.
>>833479
#386 #833479
>>833476

> А вот ты ещё читать не научился


ну так и переведи с пидерскопреподского на нормальный, че там афтор хочет то? с примером желательно.
>>833515
#387 #833515
>>833479
Что такое "стопы табуляции" тебе не ясно? Тогда пойди погугли и больше не выебывайся с тупыми вопросами.
>>833524
#388 #833524
>>833515
иди сам гугли, мне задачки для пидеров нинужны
#389 #833529
Нужно перечислить все имеющиеся в системе файлы при помощи win api и сделать некоторое преобразование файлов, у которых расширения принадлежат заданному списку. Обход дерева каталогов сделал. Какие файлы нельзя преобразовывать? Открытые и запущенные? Системные и скрытые? Как проверить, что никаких действий с файлом сделать нельзя? Как преобразовать не открытый и не запущенный файл, если какие-то его флаги не позволяют преобразование (кстати, какие?)?

Как можно эффективно проверить, что файл имеет расширение из списка, не итерируя по списку расширений? Пердолить на чистом си хэш-таблицу?
>>833552
#390 #833552
>>833529

>Как можно эффективно проверить, что файл имеет расширение из списка, не итерируя по списку расширений?



И еще вопрос. Мне нужно копировать текущий файл в файл с таким же именем, к которому добавлено расширение .tmp. Как это сделать эффективно?

Сначала я хотел поступить так: запоминаю указатель на нулевой завершающий байт и делаю lstrcat(file, ".tmp"), создаю файл с новым именем функцией CreateFile и копирую в него данные. После этого по указателю на нулевой байт присваиваю 0 и отсекаю расширение .tmp. Далее удаляю исходный файл и переименовываю новым.

Но потом я нагуглил CopyFile, которая требует два символьных пути к файлам. Так что трикс с запоминаем указателя на терминирующий нуль для экономии памяти стека тут бесполезен. Придется объявлять дополнительный массив для нового имени.

При обходе дерева каталогов переполнения стека из-за этого не будет? Как сделать эти операции эффективнее? В том числе хочу сократить время на работу со строками. Мне нужно OCHE БЫСТРО.
>>833636>>834316
#391 #833560
Есть кто в треде?
>>833589
#392 #833589
>>833560
Есть
#393 #833636
>>833552

>Мне нужно OCHE БЫСТРО


5000 рублей
#394 #833747
Нужна небольшая помощь по СИ, есть тут кто нибудь сейчас?
>>833751
sage #395 #833751
>>833842
#396 #833842
>>833751
Блл, опять пару мин подождал и отошел
Ты тут ещё?
#397 #833990
У меня есть хэш в виде 4-байтового числа. Как при помощи win api записать его в файл в виде последовательности из четырех байт? wsprintf с форматной строкой %c это ведь не то?
>>833992
#398 #833992
>>833990
Внезапно, WriteFile(..., &твойхэш, sizeof(твойхэш), ...). Надеюсь, ты не тот пидор, который пилит криптор.
>>834002
#399 #834002
>>833992

>Надеюсь, ты не тот пидор, который пилит криптор


Нет, что ты.
#400 #834109
C - филиал win api. мда.
>>834489
#401 #834160
>>820659 (OP)
Почему в ОП-посте нет ссылки на скачивание?
>>834161
#402 #834161
>>834160
В гугле только всякую парашу нахожу
Сорян, я новичок тут просто
Буду благодарен если кинете ссылку на Си
Dmitry #403 #834314
>>820708
Двачую.

Аноны а почему в C нет for ( var n in array )?
В плюсах вроде тоже нет, хотя там оно как раз еще больше нужно.
Если хочу работать с целым массивом то удобно и можно так реализовать чтобы меньше циклов тратило.
>>834319>>834490
Dmitry #404 #834316
#405 #834319
>>834314

> В плюсах вроде тоже нет


Уже есть.
>>834336
Dmitry #406 #834333
В какой ОС вы работаете?
Какая у вас графическая оболочка?
В с++ треде много шиндовс-рабов, без понятия как там работать можно, композитный оконный менеджер, куча дерьма в автозагрузке, нет нормальной консоли, нет по людски сделаного софта, только хуйня с кнопкой 'сделать заебись', нет мануалов, нихера нет.
Много кому и графическая оболочка то ненужна, только tmux, в GNU/Linux сейчас уже избавились от старого дисплей сервера - Xorg, заменили на Wayland display server protocol.
Новые тайловые и композитные менеджеры теперь очень легкие, используется простой API, какая-нибудь графическая библиотека и ничего лишнего.
Но смущает что на него не очень то быстро переходят, уже около 20 разных графических оболочек создано, но над многими работа идет весьма медлено.
Вы тайлами пользуетесь или чем?
Мне DWM нравился, но устарел, сейчас на Weston, надо на Velox перекатится.

Вы код только для работы пишете?
Dmitry #407 #834336
>>834319
Ну конечно, там много способов использования, а в сишке кроме массивов где подобный функционал пригодится?
#408 #834337
>>834333

> В какой ОС вы работаете?


> Какая у вас графическая оболочка?


OS X разумеется.
>>834347
Dmitry #409 #834347
>>834337
Ну конечно, как же Я не догадался, пишете на кастрированом языке в кастрированой ос, заодно помогая господину и гебне
>>834353
#410 #834353
>>834347
Зачем ты такой фанатик?
#411 #834367
>>834333
Принимаешь наркотики?
>>834385
Dmitry #412 #834385
>>834367
Немношк
>>834389
#413 #834389
>>834385
Как и ожидалось от неймфага
>>834397
Dmitry #414 #834397
>>834389
Reverse-enginering-ом увлекаешься?
>>834399
#415 #834399
>>834397
Да, у меня даже истерики иногда на этой почве случаются
>>834409
Dmitry #416 #834409
>>834399
А что ты реверсишь? Надо бы nouveau до нормального состояния довести, чтобы OpenCL было, чтобы Vulcan, OpenGL 4.5 был.
Блоб там гиганский, говнокода и легаси дохуище, если все лишнее убрать то опенсорцный драйвер будет быстрее чем в шиндовсе, ибо майкрсофт платит чтобы в GNU/Linux были плохие дрова
>>834414>>834419
#417 #834411
>>834333

>В какой ОС вы работаете?


Oracle Linux.

>Мне DWM нравился, но устарел


Пользуюсь патченным dwm, tmux + vim/emacs, брат жив зависимость есть. Из реально графических приложений (тех, что нельзя запустить в консоли), что регулярно юзаю, это лиса, тандербёрд и zathura для чтения pdf.
>>834437
#418 #834414
>>834409

>ибо майкрсофт платит чтобы в GNU/Linux были плохие дрова


ты реально поехавший
>>834433
#419 #834419
>>834409

>Надо бы nouveau до нормального состояния довести, чтобы OpenCL было, чтобы Vulcan, OpenGL 4.5 был



Ниасилю, я еще маленький
Dmitry #420 #834433
>>834414
Какой же ты манька, скажи еще что майкрсофт, фейсбук и гугл не сотрудничают с правительствами.
>>834435
#421 #834435
>>834433
ты сначала пруфы притащи, что мелкомягкие платит кому-то (кому?), что в линуксе были плохие дрова (каким образом они должны быть плохими?)
>>834438>>834443
Dmitry #422 #834437
>>834411
Захура, это же надстройка над mupdf (пожно сам mupdf юзать) или над poppler (это уже чисто библиотека).
У тебя ноутбук?
>>834466
Dmitry #423 #834438
>>834435

>кому


nvidia же.
Амуда сама по себе плоховатые дрова делает, и они немного открытые, а интел сама опенсорцные дрова делает.
Dmitry #424 #834443
>>834435
Ты посмотри на размер дров этих, обосратся можно, пруфоф нет, ибо не имею отношения к этим корпорациям, но это весьма очевидно что что-то не так, раз майкрсофт держит рынок даже после скачивания в говно, а в говно они скотились начиная с семерки.
#425 #834464
Ебланы хуесосят винду и не понимают, что винда нужна для того, чтобы делать это https://peinjector.eu/
>>834468
#426 #834466
>>834437
У меня десктоп. Я без понятия о mudf. Юзаю zathura из-за vim-like key bindings.
>>834469
Dmitry #427 #834468
>>834464
Прошивка для игр и вирусов, об этом все и говорят, ненужно.
>>834473
Dmitry #428 #834469
>>834466
У тебя он установлен наверно, пробуй mupdf открыть, он сам по себе не откроется, надо путь к пдф-ке указать.
>>834472
#429 #834472
>>834469
И нахуя мне это нужно?
>>834475
Dmitry #430 #834473
>>834468
Windows - survilence engine, tracking OS.
Dmitry #431 #834475
>>834472
Хрен знает, попробуй, мне захура сложновата показалась.
А почему на Wayland не перешел?
>>834486
Dmitry #432 #834484
А еще я сосу хуи.
#433 #834486
>>834475
меня пока иксы устраивают, я не гонюсь за всем новым
>>834498
#434 #834489
>>834109
Ну так си только в винде используется поэтому винда и си такое говно, если я не ошибаюсь
>>834504
#435 #834490
>>834314
тому что нельзя вычислить размер массива в си
>>834501
#436 #834491
>>834333
GNU/FSF - говнософт по определению.
На энтузиазме нельзя построить действительно хорошую ос и софт.
>>834502
Dmitry #437 #834498
>>834486
Тут не в новизне дело, иксы избыточны, устарели уже, новый протокол написан с нуля, заточен под разработку графических приложений в наши дни, ничего лишнего
Dmitry #438 #834501
>>834490
Размер нельзя, но можно сделать так:
for (int i;arr;i++)
{
}
Но вычисление количества элементов не должно быть реализовано на C, компиляторы на C++ пишутся, можно на асме что угодно реализовать чтобы дополнить синтаксис сишки.
>>834549>>837034
Dmitry #439 #834502
>>834491
Но они уже построили ее маньк.
Лучшей ОС сейчас нет.
#440 #834504
>>834489

>Ну так си только в винде используется


Что за херню ты несёшь, на C написано 99% софта для UNIX-like OS.
#441 #834528
vilsual studio это просто редактор для Си?
>>834550
#442 #834529
visual studio эт просто редактор для Си?
>>834530
#443 #834530
>>834529
это просто текстовый редактор, типа notepad.
Dmitry #444 #834549
>>834501
arr
туплю
Dmitry #445 #834550
>>834528
Нет, это ненужная жирная и тормозная хуета, используй nano, vim, emacs, и GCC
>>834674
#446 #834674
>>834550

> nano, vim, emacs, gcc


из этого только nano можно использовать, остальное же gnu-софт, т.е параша
>>834682>>834708
#447 #834682
>>834674
уебуй петух нахуй с нашего тредика
>>834687
#448 #834687
>>834682
ну вот почему gcc лучше того же icc/msvc/clang-llvm? Я например не могу пользоваться компилятором, где очень много говна
vim-emacs - сложно освоить, мне непонравилось, смылса в этом нет, особенно под виндой
>>834690>>834713
#449 #834690
>>834687

>vim


там скорость работы с текстом возрастает в миллиард раз, ты выдно заблудившийся хипстер мышкодрочер
>>834695>>834701
#450 #834695
>>834690
Он мне может обеспечить нормальный рефакторинг, автокомплит без лагов и провисаний с задержкой 3-5 секунд? А профилирование, юнит-тесты? А нормальная поддержка отладчика?

Все это недоступно виму. Поэтому я вставляю зонды в сраку, начинаю сосать хуй у господина, запуская свою любимую VS2015
>>834699>>834707
#451 #834697
лол, знавал одного старого петухана, он двумя указательными пальцами печатал, затем если надо копирнуть, жал лкм, выделял, нажимал пкм-выбирал копировать, тащил курсор в место вставки, нажимал пкм-вставить. наверное поэтому он был занудой и очень любил давать советы.
>>834716
#452 #834699
>>834695

>начинаю сосать хуй у господина


тебе в тредик пхп, джава, сишарпа или раста
>>834706
sage #453 #834701
>>834690

> скорость работы возрастает


После ESC:%!rm -f `which vim` и установки нормального текстового редактора скорость работы значительно возрастает.
Dmitry #454 #834706
>>834699
Двачаю бро, однако меня все-же разочаровывает пассивность некоторых программистов, они работают только за бабло, и даже для себя хуй что напишут, или не делают ПО общедоступным, или только бинарь предоставляют, многие делают свои велосипеды вместо того чтобы довести до ума уже готовый.
>>834715
Dmitry #455 #834707
>>834695
Дай мне свой айпишник, логины пароли аккаунтов, доступ к вебке микрофону и клавиатуре, адрес тоже давай.
Dmitry #456 #834708
>>834674
nano и есть GNU- software
Dmitry #457 #834713
>>834687
Незнаю что ты там имел в виду под 'много говна' но GCC компилирует быстрее, производит более быстрый код.
Одно мне не нравится - он почти стендалоне (но не на нормальной OS - Gentoo тут по умолчанию минимальный необходимый функционал, можно еще меньше сделать, ПО стает очень быстрым и легким)
#458 #834715
>>834706
Помоему разобраться в чужом посложнее, чем написать свое с нуля
Мимонафаня
>>834718
Dmitry #459 #834716
>>834697
Хахах, он же на С кодил?
>>834719
Dmitry #460 #834718
>>834715
Ну хуй знает, Я вот зеро был в C, да и сейчас хелловордщик, однако читать код могу, могу править, а с нуля писать хз, Мне хоть бы на что нибудь посмотреть надо.
Чтобы улучшать скилы надо читать много кода, особенно новичкам, без этого никак, благодаря FSF у всех есть такая возможность.
>>834722
#461 #834719
>>834716
нет конечно, он его неосилил, но советами заебывал
Dmitry #462 #834722
>>834718
Алсо начал читать ttytanks, по началу нихера не понимал что это, зачем? Но спустя некоторое время путем поправочек, чтения чтения, поправочек, и пулл-реквестов наверно 50-60% кода там мои, еще Я разбил его на большее количество файлов, стало проще ориентироватся, добавил скрипт для прекомпилежки (делает готовые бинари для разных процессоров, они не нуждаются ни в каких либах, будет работать и на BSD и на всяких LFS, роутерОС по идее, где нет библиотек)
>>834726
Dmitry #463 #834726
>>834722
И грубо говоря это теперь другая совсем игра, раньше скрин обновлялся целиком, теперь по людски выводит изображение, но артефакты случаются, еще надо пофиксить ввод, ибо он там через wgetch реализован, что полный пиздос, надо напрямую клавиши слушать через evdev или libinput, чтобы скорость игры от терминала не зависела
Dmitry #464 #834731
GNU Debugger GDB полезен если программа не крашится, но ведет себя немножко странно?
И как запустить скрипт или кусочек баш кода из Makefile? или может можно в мейкфайле цикл запустить?
(Автор этого поста был предупрежден.)
#465 #834850
Срущий неймфаг, мое терпение истекает вместе с терпением анонов.
>>834917
#466 #834917
>>834850
Я его уже репортил. Моче - похуй. Спасибо, Абу.
>>835066
#467 #835060
#include <stdio.h>

main()
{
int c;

c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

Запускаю.
Пишу в консольку
abc
Нажимаю enter.
Всё ок, выводят abc.
Нажимаю ctrl-d, программа завершается, всё ок.
Теперь запускаю и пишу abc, но enter не нажимаю. Вместо этого сразу нажимаю ctrl-d.
Программа выводит на той же строчке abc.
Если после этого второй раз нажать ctrl-d программа завершается.
Почему первый ctrl-d не завершил программу?
#467 #835060
#include <stdio.h>

main()
{
int c;

c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

Запускаю.
Пишу в консольку
abc
Нажимаю enter.
Всё ок, выводят abc.
Нажимаю ctrl-d, программа завершается, всё ок.
Теперь запускаю и пишу abc, но enter не нажимаю. Вместо этого сразу нажимаю ctrl-d.
Программа выводит на той же строчке abc.
Если после этого второй раз нажать ctrl-d программа завершается.
Почему первый ctrl-d не завершил программу?
>>835429
#468 #835066
>>834917
Моче не похуй, но она придерживается сдержанной позиции пока что - он ничего серьезного не натворил. Но если будет продолжать доебывать анона и срать в тредах, то запросто можно будет побанить его за говнопостинг.
#469 #835122
сисечки, под винойе мэйкфайл неверно интерпретирует звездочки в правилах, как это забороть? з.ы. примера под рукой нет, но проблема известная и знающим понятна.
>>835123
#470 #835123
>>835122

>быстрофикс


под виндовз
#471 #835429
>>835060
Какие-то особенности терминала. Он не отдает EOF по Ctrl+D, пока он не на отдельной строке.
#472 #835542
Анон, почему мой кодес выполняется с ошибкой? https://ideone.com/K5ql4h

sh[] - спижженый шелл, который должен запускать calc.exe на вин XP.
code[] - мой шеллкод, вот его сурс https://ideone.com/dbvsGu

Нихуя не работает. Когда управление передается моему шеллкоду, процессор доходит до вызова WinExec и улетает куда-то в ебени. Как надо писать шеллкоды под win7 и старше? На всех сайтах посоны заверяют, что под win xp работает заебись.
>>835548>>835557
#474 #835550
>>835548
Тогда почему выполнился почти весь шеллкод кроме вызова WinExec?
>>835552
#475 #835552
>>835550
И если этим шеллом заражать бинарники, то тоже программа при выполнении падает. Потом правлю точку входа на оригинальную , обнуляю байты шеллкода, и зараженная программа продолжает работать как раньше.

Заражаю code cave в секции кода, т.е. DEP тут вообще никак не должен помешать.
#476 #835557
>>835542

> почему мой кодес выполняется с ошибкой?


Потому что плохо читал гайды, читай лучше.
1) Если в XP ShellExec и лежала в каком-то из билдов по 0x7C8629FD, это нихуя не значит, что она и в 7 будет там лежать. Можешь сходить отладчиком и посмотреть, что там лежит. Это что касается кода sh. Что же касается кода в sh, там ты вообще вызываешь функции по адресам 0x00000020 и 0x00000026 - подозреваю, что рипнул из объектника, а про существование поправок (fixups, relocations) не знаешь.
2) Посмотри, как посоны делали поиск KERNEL32, парсинг таблицы экспортов, чтобы узнать адреса LoadLibrary/GetProcAddress, хэши имен API, вот это все.
3) У нас теперь ASLR, всё стало сложнее.
>>835561
#477 #835561
>>835557

>подозреваю, что рипнул из объектника, а про существование поправок (fixups, relocations) не знаешь


Да, из объектника. Где про это все читать?

>GetProcAddress


Окай, можно вычислить адрес заранее для разных операционок, а можно вычислять при заражении и патчить адрес в шеллкоде, пометив его как-нибудь типа 0xDEADBEEF.
>>835568
#478 #835564
Вычислить как-нибудь вот так:
func_addr = (DWORD)GetProcAddress( LoadLibrary("kernel32.dll") , "WinExec");
#479 #835568
>>835561

> Где про это все читать


Хуй знает. Иди на амазон, вводи в поиске shellcode, смотри, что больше нравится людям, покупай или пирать.

> вычислить адрес заранее для разных операционок


Даже если бы ASLR не существовал, адрес все равно менялся бы от апдейта к апдейту.

Вот почему наш тредик всё время скатывается в максимальную байтоёблю?
#480 #835582
а вообще, представляю. сидишь такой читаешь хакирин из 90х, и ткой щас я попробую, а нихуя не работает, и чёт приуныл(. или другой вариант, компилишь код, а он падает, потому что поинтер кастуется в int.
>>835592
#481 #835592
Отладил свой шеллкод, с предвычисленным адресом он работает. Попробую сделать им инфект, а потом добилить инфектор так, чтобы он сам вычислял адрес.

https://ideone.com/oVyQxi

>>835582
Все так и есть((((
#482 #835598
Странно, после инфекта калькулятор как будто был запущен, но ПРЕКРАТИЛ РАБОТУ.
>>835662
158 Кб, 1272x800
#483 #835604
>>835662
45 Кб, 500x344
#484 #835608
Забыл вычислить адрес ExitProcess.
И о том, что использовал его, забыл
#485 #835635
Чем это анон ты занимаешься этаким интересным, а ну, говори!
>>836418
#486 #835662
>>835598
>>835604
Все ясно. Я забыл нуль в конце строки "calc.exe", когда копировал шеллкодес.
15 Кб, 1024x1024
#487 #836418
>>835635
я всё никак не допишу мультитредовый malloc с выгрузкой из памяти на хард, когда не нужно - вот этот момент ещё не до конца додумал, но общая концепция есть.

но лень, я вообще нихуя не делаю, просто бухаю и всё.

как назвать место, где хранится адресация памяти, его разметка, и свободные части и занятые? я не умею в английский.
>>836419
#488 #836419
>>836418

> с выгрузкой из памяти на хард, когда не нужно


Это embedded или тебя чем-то не устраивает системный файл подкачки?
>>836421
#489 #836421
>>836419
да как-то заебало, не может системный менеджер всё понять правильней, чем единичное приложение, которое точней может предугадать когда что понадобится - в идее. а может оно, системное распределение, работает галимовряд ли - я не знаю, но смотря на теже браузеры - они вообще не парятся, просто жрут ВСЁ. и никто не конструирует программ с параметром --ДОСТУПНАЯПАМЯТЬ - наверно в этом интерес. и да, я собираюсь это всё запускать на спектруме и сеге.
>>836422
#490 #836422
>>836421

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


heap descriptor?
>>836424
#491 #836424
>>836422
не думал с такой точки зрения.
#492 #836426
хотя думал, но мне, почему-то вбилось в голову, распространённое, descriptor как ключ доступа.
#493 #837034
>>834501
Разве в C можно объявлять переменную в разделе описания цикла? Только в плюсах же!
>>837038
#494 #837038
>>837039
#495 #837039
>>837038
Точно. Значит я использую старое говно.
#496 #837218
бородатые няши, есть указатель на utf8 строку, нужно получить например третий символ, как узнать его начальный байт в буфере?
>>837239>>837550
#497 #837239
>>837218
ну, тип, раскодировать)).
>>837242
#498 #837242
>>837239

>раскодировать


куда, кого, нахуя?
>>837243
#499 #837243
>>837242
да прост)
#500 #837269
Антуаны-железячники и мимопроходящие, подскажите, может быть кто-то знает, как решить мою проблему. Есть один CRC32, реализованный в железе. Соответственно, доступа к алгоритму нет. Есть файл и хеш к нему. Как узнать алгоритм, чтобы рассчитать контрольную сумму для других файлов? Перебором полинома? Может быть, какие-то методики есть?
>>837550
#501 #837325
Аноняши, хоу стать экспертом использования GDB и устроится на работу, где мои звниня будут востребованы
Есть ли годная литература по етому? Что вы сами читывали?
>>837393>>837550
#502 #837393
>>837325
нихуя не читал - нихуя не умею чёт увлёкся электромагнетизмом... но какое-то вводное есть у криски - но не читал.
#503 #837550
>>837218
Ну если не проверять строку на корректность, то искать третий по счету байт, у которого не установлен старший бит (т.е., банально цикл со счетчиком и маской 0x80).

>>837269
Можно бездумно брутфорснуть же.

>>837325
Прочитать ман уже предлагали?
>>837560
#504 #837560
>>837550
Бля, про UTF-8 пизжу. Надо if ((byte & 0xc0) != 0x80), тогда начало очередного символа.
Тред утонул или удален.
Это копия, сохраненная 29 сентября 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски