← Más ejemplos de código: Java, Python, C#, PHP, C…
El lenguaje C es el de los núcleos de Linux y Windows, de SQLite, Git, curl, el intérprete de Python y el firmware de millones de aparatos, y sigue segundo en el índice TIOBE de octubre de 2026. Aquí tienes un curso desde cero con C23 y GCC 15, una guía de los fallos de seguridad que más se repiten y de cómo detectarlos, los estándares y parches que hay que conocer, sus rarezas, un test y ejemplos para tareas concretas. Todo el código se compiló y se ejecutó antes de publicarse.
Curso · 8 leccionesAprende C desde cero, en españolDel primergcc hola.c a un proyecto con pruebas: tipos y desbordamientos, control y funciones, arrays y cadenas, punteros, struct y memoria dinámica, archivos y make. Con esquemas, retos y el aviso real del compilador o del sanitizador en cada error.Ir al curso →Seguridad: lo que no puede faltar
C da acceso directo a la memoria y casi no comprueba nada al ejecutar: por eso tantos fallos de seguridad famosos están en programas escritos en C. Casi todos se repiten, y casi todos los detectan herramientas gratuitas que vienen con GCC y Clang. Cada lección del curso tiene su recuadro «Ojo con la seguridad», y estas dos páginas lo reúnen todo.
Seguridad · 16 fallosLos fallos de seguridad típicos de C y cómo evitarlosDesbordamientos de búfer, lecturas fuera de límites, uso tras liberar, enteros que se desbordan, cadenas de formato, inyección de órdenes y señales: cada uno con cómo lo detectan el compilador y los sanitizadores, y la forma segura.Ver los fallos → Estándares y parchesDe K&R a C23, y cómo mantener C al díaQué trajo cada estándar, qué usa tu compilador, las opciones que endurecen un ejecutable y siete fallos reales, del gusano de Morris a Heartbleed, regreSSHion y la puerta trasera de xz.Ver los estándares →Practica y ponte a prueba
RarezasComportamiento indefinido y otras sorpresas de Ca[i] es lo mismo que i[a], -1 no es menor que sizeof(int), macros que calculan mal y comprobaciones que el optimizador borra.Ver las rarezas → Test · 24 preguntas¿Qué imprime este código?24 preguntas sobre el curso, con fragmentos de C: decide qué escriben. Con la nota, los aciertos por lección y la salida real de GCC 15 en cada respuesta.Hacer el test →Los ejemplos son programas de un solo archivo que se compilan con gcc -Wall -Wextra programa.c -o programa. Usan C23, así que hace falta GCC 15 o Clang 19 con -std=c23; los que usan funciones de POSIX (procesos, hilos, getline) funcionan en Linux y macOS.
Archivos y texto
- Leer un archivo línea a líneafgets, quitar el salto de línea, líneas largas, getline y leer el archivo entero con fread.
- Leer y escribir CSVUn lector que respeta las comillas y las comas de los campos, y cómo escribir CSV válido.
- Cadenas: trim, split y unirQuitar espacios, dividir sin perder campos vacíos, unir con snprintf y convertir con strtol.
- Fechas y horastime_t y struct tm, strftime, zonas horarias, sumar días y medir tiempos.
Estructuras de datos y algoritmos
- Ordenar y buscarqsort con números y estructuras, la comparación que no se desborda y bsearch.
- Una lista enlazadaInsertar, borrar, invertir y liberar sin fugas, con el truco del puntero a puntero.
- Pila y colaComprobar paréntesis con una pila y una cola con búfer circular, sobre un array.
- Números aleatoriosrand y srand, un rango sin sesgo, mezclar con Fisher-Yates y arc4random para secretos.
El sistema: argumentos, entorno, procesos e hilos
- Argumentos de la línea de órdenesargc y argv, getopt_long, –help y los códigos de salida.
- Variables de entornogetenv con valores por omisión y validados, setenv, environ y los secretos.
- Procesos: fork y execfork, execvp y waitpid, leer la salida de un hijo con pipe y posix_spawnp.
- Hilos con pthreadsRepartir un cálculo, carreras de datos con ThreadSanitizer, mutex y atómicos.
Todo el código se compiló con GCC 15.3 (C23, -Wall -Wextra) y glibc 2.41 en un contenedor limpio antes de publicarse; las salidas, los avisos del compilador y los informes de los sanitizadores que aparecen están copiados de esa ejecución. ¿Buscas C++? Está en Ejemplos de C++.
