© 2026 Dometrain. All rights reserved.
Learn intermediate C by writing overflow-checked integer code, binary encoders and decoders, hash tables, trees, custom allocators and text parsers, tested in your browser.
Once pointers, malloc and free, structs, linked lists and function pointers are familiar, the next C you write is often a checksum, a binary decoder, a hash table or an allocator. Each depends on rules a level below the beginner material: unsigned arithmetic wraps, the compiler pads between struct fields, a format’s byte order may differ from the machine’s, and a container for any element type has to be built from void * and an element size.
This hands-on course has 49 exercises, and every one runs in your browser without installing anything. Every lesson ends with C code for you to write, which tests then run and check. The code is C17 as clang compiles it. Fixed-width integers come first: wraparound in a 16-bit checksum, floor division with negative operands and an exact overflow check when parsing a uint64_t. Struct layout covers padding, offsetof, flexible array members and bit-fields, and binary formats cover both byte orders, a bounds-checked read cursor, LEB128 and a table-driven CRC-32. In generic code with void * you write a growable array, a stable merge sort and intrusive lists with container_of. Hash tables (chaining, linear probing, tombstones, rehashing) and binary search trees and heaps follow, ending with top-k selection on a bounded min-heap. Later chapters build custom allocators such as a bump arena and a fixed-size pool, work through macros, _Generic and variadic functions, and parse text, from UTF-8 validation and quoted CSV fields to a recursive-descent expression evaluator. The course ends with opaque types behind a header and two capstones, an LRU cache and a stack-based bytecode interpreter.
It suits engineers who have finished C for Beginners, or who already write C with pointers, dynamic memory, structs and function pointers, and want practice with the memory layout, byte-level encoding and data structures that larger C programs are built on.