AprenderC
← Referencia

Referencia

Chuleta de C

Lo que se usa de verdad en los talleres, en una sola página.

Entrada y salida

FunciónQué 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

FormatoTipoNota
%d · %iintEnteros con signo
%uunsignedSin signo
%zusize_tLo que devuelven sizeof y strlen
%.2fdoubleDos decimales
%ccharUn carácter
%schar *Cadena terminada en \0
%pvoid *Una dirección
%-10schar *Alineado a la izquierda en 10 columnas

Memoria

FunciónQué 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
NULLDirección inexistente. La devuelven malloc y fopen al fallar
sizeof *vTamaño del tipo apuntado. Mejor que sizeof(int)

Cadenas

FunciónQué 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.txt

Los 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.