#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char *dynfeld=0, *zwischenfeld=0;
	char eingabe='1';
	int laufindex=0, maximallaenge=10;
  

          
	printf("Dieses Programm kann einen 'beliebig langen' string einlesen und bearbeiten.\n\
'Beliebig lange' heisst dabei: so lang, wie ein zusammenhaengender Speicherblock verfuegbar ist.\n\
Geben Sie bitte Ihre Zeichenkette ein und schliessen Sie die Eingabe mit 'return' ab.\n");
    
       
     /*Eingabeschleife*/   

	laufindex=0;
	while(eingabe!=0 )
	{

		scanf("%c",&eingabe);
		 
		if(eingabe==10)
		{
			eingabe=0;
		}
                           
                           /* Dynamische Allokierung des neu erforderlichen Speicherplatzes */
			   
		zwischenfeld=(char*)(realloc(dynfeld,(laufindex+1)*sizeof(char) ));
		if(!zwischenfeld)/*In diesem Fall liegt dynfeld unveraendert vor.*/
		{
			printf("Speicherplatz kann nicht bereitgestellt werden! Programmabbruch!\n\n");
			         /* Auch vor Programmabbruch Aufraeumen nicht vergessen! */
			free(dynfeld);
			return(1);
		}
	                 
		dynfeld=zwischenfeld;
		dynfeld[laufindex]=eingabe;
		laufindex++;
			
		if(laufindex>2147483646)
		{
			printf("Zeichenkette zu lang! Abbruch! \n\n");
   		               /* Auch vor Programmabbruch Aufraeumen nicht vergessen! */
			free(dynfeld);
			return(1);
		}
		     
        }      

	maximallaenge=laufindex;  
  
 
       
     /*Ausgabeschleife*/
     
	printf("Sie hatten die folgende Zeichenkette eingegeben:\n");   
	laufindex=0;
 
	while(dynfeld[laufindex]!=0 && laufindex < maximallaenge)
	{
		printf("%c",dynfeld[laufindex]);
		laufindex++;
	}
	 

   /*Ausgabe des Punktes, um anzuzeigen, dass ggfs kein Zeichen eingegeben wurde.*/    
   /* Abschliessendes line feed zur besseren Plazierung des wieder erscheinenden shell-prompts.*/
	printf(".\n\n");   
    
    
    /* Ganz wichtig: Zu guter Letzt muss man den allokierten Speicher wieder freigeben! */
    
	free(dynfeld);
  
	return(0);
}

