Referencia
Chuleta de C
Lo que se usa de verdad en los talleres, en una sola página.
Entrada y salida
| Función | Qué hace |
|---|---|
| printf(fmt, …) | Escribe en la consola. Es fprintf(stdout, …) |
| fprintf(f, fmt, …) | Escribe en un stream. El de los talleres |
| fscanf(f, fmt, &x) | Lee con formato. Devuelve cuántos valores logró leer |
| fgets(buf, n, f) | Lee una línea completa respetando el tamaño del buffer |
| fopen(ruta, modo) | "r" leer, "w" escribir (vacía el archivo), "a" añadir |
| fclose(f) | Cierra y vacía el buffer pendiente |
| perror(msg) | Explica en stderr el último error del sistema |
Especificadores
| Formato | Tipo | Nota |
|---|---|---|
| %d · %i | int | Enteros con signo |
| %u | unsigned | Sin signo |
| %zu | size_t | Lo que devuelven sizeof y strlen |
| %.2f | double | Dos decimales |
| %c | char | Un carácter |
| %s | char * | Cadena terminada en \0 |
| %p | void * | Una dirección |
| %-10s | char * | Alineado a la izquierda en 10 columnas |
Memoria
| Función | Qué hace |
|---|---|
| malloc(size) | Reserva bytes. Vienen con basura |
| calloc(n, size) | Reserva n × size bytes puestos a cero |
| realloc(p, size) | Cambia el tamaño de un bloque existente |
| free(p) | Devuelve el bloque. Uno por cada malloc |
| NULL | Dirección inexistente. La devuelven malloc y fopen al fallar |
| sizeof *v | Tamaño del tipo apuntado. Mejor que sizeof(int) |
Cadenas
| Función | Qué hace |
|---|---|
| strlen(s) | Largo sin contar el \0 |
| strcpy(dst, src) | Copia. No comprueba el tamaño del destino |
| strcat(dst, src) | Concatena al final de dst |
| strcmp(a, b) | 0 si son iguales |
| strstr(h, aguja) | Busca una subcadena; NULL si no está |
| strcspn(s, "\n") | Posición del primer carácter del set: recorta lo que deja fgets |
Compilar y depurar
gcc -std=c17 -Wall -Wextra -Wpedantic -g -o programa src/main.c
./programa tests/test01/input.txt mi_output.txt
diff -u tests/test01/output.txt mi_output.txt
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes \
./programa tests/test01/input.txt mi_output.txt
gdb --args ./programa tests/test01/input.txt mi_output.txtLos cinco segfaults clásicos
Qué no hacer. Cada uno de estos compila sin quejarse.
char *s = "hello world";
*s = 'H'; /* 1. modificar un literal */
int *ptr = NULL;
printf("%d", *ptr); /* 2. desreferenciar NULL */
int *p = malloc(8);
free(p);
*p = 110; /* 3. usar memoria liberada */
int arr[2];
arr[3] = 10; /* 4. fuera del arreglo */
int n = 2;
scanf("%d", n); /* 5. scanf sin & */Material de estudio no oficial · IIC2133 Estructuras de Datos y Algoritmos · PUC · 2026-2. Ante cualquier diferencia, manda Canvas.