Originariamente inviato da Who am I
Il sistema è comunque troppo dipendioso, lo puoi fare per esercizio ma se parli di efficienza la realloc causa sempre una chiamata di sistema.
Puoi limitare il numero di caratteri presi in input con fgets (che puoi cercare nella documentazione), e ad ogni stringa presa in input allocare memoria e copiarla.
Ho capito il discorso anche grazie al link di Oregon ( grazie ). Per il momento voglio lasciar perdere il fattore efficienza...Quello che ho scritto, per esercizio, è questo :
codice:
//prova funzionamento REALLOC
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define num 3                                         //definisco ogni quanto usare realloc
int main()
{
	char *p;
	int i=0;
	int k=num;
	char v[11];
	char c;
	p=(char*)malloc(sizeof(char)*num);
	*p='\0';                                          //metto il tappo all'inzio per sfruttare strcat
	printf("Inserire la parola\n");
	while((c=getchar())!='\n')
	{
		if(i<num)
		{
			v[i]=c;
			i++;
		}
		else
		{
			k=k+num;
			v[i]='\0';
			p=(char*)realloc(p,sizeof(char)*k);
			strcat(p,v);
			i=0;
		}
	}
	if(i!=0)                                         //caso in cui esce dal ciclo prima di aver allocato "num" elementi
	{
		v[i]='\0';
		strcat(p,v);
	}
	printf("La parola letta e' : %s \n",p);	
	return EXIT_SUCCESS;
}
Il problema: Le lettere in posizione multipli di 6 non compaiono nella stampa. Ho provato simulazione su carta ma non ho trovato nessun errore, potete darmi una mano?