Oi Alessandro,
na função put diz que preciso copiar key e val e inserir as cópias na árvore.
Você quis dizer no vetor e não árvore, certo?
Essa implementação será em vetor ordenado + buscas binária.
Até a parte de alocar memória usando nVal e nKey eu entendi, porém não sei como devo fazer pra copiar o conteúdo de key e val para as novas posições de memórias alocadas...
Legal que você perguntou.
Para clonarmos uma objeto apontado por obj
e que possui nObj
podemos fazer o seguinte.
/* o include abaixo já está no arquivo binarysearchst.c */
#include <string.h> /* memcpy() */
/* alocamos espaço para o clone/copia */
void *clone = emalloc(nObj);
/* copiamos nObj bytes a partir da posição apontada por obj para a posição
* apontada por clone */
memcpy(clone, obj, nObj);
A man page do memcpy()
diz o seguinte
% man memcpy
MEMCPY(3) Linux Programmer's Manual MEMCPY(3)
NAME
memcpy - copy memory area
SYNOPSIS
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
DESCRIPTION
The memcpy() function copies n bytes from memory area src to memory
area dest. The memory areas must not overlap. Use memmove(3) if the
memory areas do overlap.
RETURN VALUE
The memcpy() function returns a pointer to dest.
[...]
Eu implementei a árvore usando dois vetores, keys[] e vals[], que são vetores de ponteiros void. É assim mesmo que deve ser feito?
É isso mesmo.
É para implementar usando vetores.