ANSI C-ben mi a legeslegrövidebb lehetséges módja annak, hogy tetszőleges hosszúságú stringet olvassak be <ENTER> leütéséig?
???
Bocsi, de le tudnád írni bővebben, ha már egyetlen - számomra eddig eléggé ismeretlen - utasítással akarod megoldani a dolgot?
Mert elég furcsa, hogy ennyire egyszerű legyen a dolog. Akkor máshol miért írnak erre mindig külön függvényt???
Nyilván annyival módosul a történet a példához képest, hogy a file itt az stdin. (fp helyett stdin kell)
Isten őrizzen a gets-től. Olyan security hole-t csinál a programban, hogy öröm lesz nézni. Inkább akkor fgets. Használata:
fgets(a tömb, amibe a string-et tárolod, hány karaktert akarsz legfeljebb beolvasni, a fájl, ahonnan olvasol)
Példa:
char str[51];
fgets(str, 50, stdin);
Tudjátok, csak az a gond, hogy sajna ezek a parancsok mind tiltottak egyaránt a középsuliban, és az egyetemen is. :/
Mondván, hogy nem szabványos függvények.
Bár ettől függetlenül nektek kell igazat adjak, mert a kérdést megválaszoltátok. Más dolog az, hogy én így sem jutottam előbbre.
Amúgy a gets() és az fgets()-ről amatőr kitekintgetéseimből a programozás terén mintha az rémlene, hogy dinamikus tömbökkel nem működik... ;)
ez nekem anno működött
char *beolvas(){
char c;
int i=0;
int meret=20;//ritkan hosszab egy szó 20 betunel
char *string= malloc (meret*sizeof(char)+1);
do{
i=0;
while( (c=getchar()) !='\n' && c!=EOF ){
if(meret-1==i){//ha megis
meret=meret*2;
string = realloc(string, meret*sizeof(char)+1);//akkor ujrameretezi a tombot a ketszeresere
}
string[i]=c;
i=i+1;
}
string[i]='\0';//biztos ami biztos, legyen lezárva
}while(string[0]=='\0');
return string;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!