memcpy, memmove, memset en C
Tres operaciones en bloque, y la única regla que separa a las dos primeras.
#include <string.h>
void shift_left(int *values, size_t n) {
if (n < 2) {
return;
}
memmove(values, values + 1, (n - 1) * sizeof(int));
values[n - 1] = 0;
}
void clone_into(int *dst, const int *src, size_t n) {
memcpy(dst, src, n * sizeof(int));
memset(dst, 0, 0);
}
int same(const void *a, const void *b, size_t n) {
return memcmp(a, b, n) == 0;
}
Cómo funciona
memcpyexige que las regiones no se solapen.memmovemaneja el solapamiento correctamente, a un costo pequeño.memsetllena bytes, así que solo 0 funciona para tipos que no son char.
Palabras clave y builtins usados aquí
constifintreturnsize_tsizeofvoid
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 351
- Tokens
- 125
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 79 segundos.
Paso 5 de 5 en Memoria dinámica; paso 14 de 25 en Punteros y memoria.