Σου έχω μια πρόταση με δυναμική μνήμη:
Σε loop η getchar() διαβάζει ότι έχει ο buffer του stdin άμα βάλει 1000 χαρακτήρες στο buffer σε ένα loop η getchar θα διαβάζει τον επόμενο χαρακτήρα του buffer και δεν θα περιμένει να του δώσεις άλλο χαρακτήρα άρα διαβάζεις γράμμα γράμμα το string και το βάζεις στην κατάλληλη θέση;(Αρκεί να μην γίνει κανα fflush(stdin))
Έτσι εκμεταλέυτικα αυτήν την "αδυναμία" για να διαβάζω ένα string να γράμμα-γράμμα.
Δείτε εδώ
- Κώδικας: Επιλογή όλων
#include<stdio.h>
#include<stdlib.h>
char * readstring();
char * readstring()
{
char temp,*s=NULL;
int i=0;
while(1)//8ewritika einai apeiros vrogxos alla den einai sthn pragmatikotita
{
s=(char *)realloc(s,(i+1)*sizeof(char));//auksisi xwrou kata 1 8esi xarakthra
scanf("%c",&temp);//anagnwsi proswrinou xaraktira
if(s!=NULL)//An esei desmeutewi xwros
{
if(temp!='\n')//Oso den vazeis alagi grammis
{
s[i]=temp;//8ese to prosorino xwro gia xarakthres ston pinaka apo string
}
else
{
s[i]='\0';//eidallws termatise to
break;//kai vges apo to loop
}
i++;//auksisi metriti
}
else//An den mporeis na demseuseis xwro
{
break;//vges
}
}
return s;//Epestrepse oti demseuses
}
int main()
{
char *string=NULL;
printf("Enter a string to read\n");
string=readstring();
if(string!=NULL)
{
printf("%s\n",string);
}
}
Έτσι εκεταλευόμενος αυτό διαβάζω string απεριόριστου μήκους!

