Ok, dopo qualche ricerca sull'allocazione dinamica ho risolto così:

codice:
#include <stdio.h>
#include <string.h>

int main()
{
	int i; //contatore
	int dim_vett; //dimensione del vettore
	int dim_string = 20; 
	char **stringhe;
	char string;
	
	printf("Inserisci il numero di elementi su cui lavorare: ");
	scanf("%d", &dim_vett);
	
	printf("%d", dim_vett);
	
	stringhe = (char**)malloc(sizeof(char**) * dim_vett); //genera il vettore che conterrà le stringhe
	
	for (i=0; i < dim_vett; i++) {
		stringhe[i]= (char*)malloc(sizeof(char *) * dim_string);
		printf("\nInserisci la %da stringa da ricercare: ", i+1);
		scanf("%s", &string);
		strcpy(stringhe[i], &string);
	}
	
	for (i=0; i < dim_vett; i++) {
		printf("%s ", stringhe[i]);
	} 
	
	return 0;
}
Sembra che funzioni correttamente ma se qualcuno potesse provare e dirmi se effettivamente va sarebbe meglio... solo una cosa, ora come faccio a liberare la memoria allocata da malloc quando non serve più? Ricordo che era una cosa che andava fatta ma la procedura nella mia testa è molto nebulosa