Forum » Programiranje » C problemček
C problemček
pajac ::
Sistem linux (RH 8.0), prevajalnik gcc.
Problem: prevajalnik mi noče prevest naslednjega programa in javi napako (ali opozorilo)!
"the 'gets' function is dangereus and should not be used."
/*--znakovni nizi--*/
#include
int main()
{
char oseba[30];
printf("\nVpisi ime: ");
gets(oseba);
printf("Pozdravljen, ");
puts(oseba);
return 0;
}
Problem je z funkcijama 'gets' in 'puts' .
Zelo bi bil hvaležen za rešitev problema ali vsaj kakšno drugo možnost, ki bi mi omogočala vnos znakovnega niza in njegov izpis na zaslonu.
Problem: prevajalnik mi noče prevest naslednjega programa in javi napako (ali opozorilo)!
"the 'gets' function is dangereus and should not be used."
/*--znakovni nizi--*/
#include
int main()
{
char oseba[30];
printf("\nVpisi ime: ");
gets(oseba);
printf("Pozdravljen, ");
puts(oseba);
return 0;
}
Problem je z funkcijama 'gets' in 'puts' .
Zelo bi bil hvaležen za rešitev problema ali vsaj kakšno drugo možnost, ki bi mi omogočala vnos znakovnega niza in njegov izpis na zaslonu.
Urko ::
namesto funkcije gets uporabi funkcijo scanf namesto funcijo puts pa funkcijo printf
npr: scanf("%s",&oseba) in printf("%s",oseba)
npr: scanf("%s",&oseba) in printf("%s",oseba)
napsy ::
raje uporabi c++ cin.getline() metodo. Čisto preprosto prebereš vrstico.
"If you die, you die. But when you live you live. There is no time to waste."
pajac ::
Ne morem, ker rabim C na faxu in ga zato moram znat. Me zanima, če vam javi prevajalnik kakšno napako, pri uporabi te funkcije.
jlpktnst ::
Ne vidim problema, saj je samo warning (preizkušeno dela), če pa te zelo moti (če pravi kompiler da je nevarno mu je kar za verjet) si najdi alternativo (tega pa ne mene vprašat, moj problem je da po 4 letih prakse še vedno ne obvladam io komand :(
LP
LP
kopernik ::
Pajac:
Ne morem, ker rabim C na faxu in ga zato moram znat.
V C-ju že nekaj časa nisem programiral, ampak tako na hitro ti lahko
povem naslednjo rešitev (ki je mogoče napačna, preizkusi):
main()
{
int ch, i=0;
char vrstica[30];
while((ch = getchar()) != EOF)
{
//nekam si spravi vse zapisane znake
vrstica[i++] = ch;
//ce je konec vrstice
if(ch =='\n')
{
//do something
}
}
}
Ne vzeti zgornje kode kot pravilne! moraš jo preizkusiti
lp
Zgodovina sprememb…
- spremenil: kopernik ()
noraguta ::
ms cl in pa gcc version 3.2 (mingw) se 0 ne pritozujeta. pozereta tvojo kodo brez bevska in mevska.
drugace pa dodaj:
char ch;
int i;
for(i=0;(ch = getchar()) != '\n'; i++)
{
oseba[i] = ch;
}
drugace pa dodaj:
char ch;
int i;
for(i=0;(ch = getchar()) != '\n'; i++)
{
oseba[i] = ch;
}
BigWhale ::
Komplikatorji... :P
#include
int main()
{
char oseba[30];
printf("\nVpisi ime: ");
fgets(oseba, sizeof(oseba), stdin);
printf("Pozdravljen, %s\n", oseba);
return 0;
}
In za vse tiste, ki so mnenja 'saj je samo warning'... AAAAAA! Kaj ce bi compiler rekel, " makes integer from pointer without a cast" to je tudi samo warning a ne? ;>
Compile w/o warnings and live happily ever after... :)
gets should be banned!
#include
int main()
{
char oseba[30];
printf("\nVpisi ime: ");
fgets(oseba, sizeof(oseba), stdin);
printf("Pozdravljen, %s\n", oseba);
return 0;
}
In za vse tiste, ki so mnenja 'saj je samo warning'... AAAAAA! Kaj ce bi compiler rekel, " makes integer from pointer without a cast" to je tudi samo warning a ne? ;>
Compile w/o warnings and live happily ever after... :)
gets should be banned!
pajac ::
Klapa najlepša hvala, mi je uspelo!!
Če mi še kaj ne bo jasno se znova oglasim.
Lep pozdrav!!
Če mi še kaj ne bo jasno se znova oglasim.
Lep pozdrav!!
demokedes ::
Pozdravljeni,
jest mam tud en manjši c-problemček. In sicer zanima me:
-kaj dela funkcija malloc
-kaj pomeni operator -> A ma to kej veze s strukturami. Če prav razumam s tem operatorjem prideš do elementa znotraj dolpčene strukture.
lp
Rok
jest mam tud en manjši c-problemček. In sicer zanima me:
-kaj dela funkcija malloc
-kaj pomeni operator -> A ma to kej veze s strukturami. Če prav razumam s tem operatorjem prideš do elementa znotraj dolpčene strukture.
lp
Rok
OwcA ::
@demokedes: malloc() ti zaseže določen del heapa (spomina) in ti vrne kazalec (void) nanj.
Mislim, da je -> operator le v C++, nisem pa prepričan. V vsakem primeru z njim v enem koraku dereferenciraš kazalec dostopaš do atributov ali metod objekta (struct ali class).
P.S. Dopuščam možnost, da kar sem napisal ni čisti C
Mislim, da je -> operator le v C++, nisem pa prepričan. V vsakem primeru z njim v enem koraku dereferenciraš kazalec dostopaš do atributov ali metod objekta (struct ali class).
sturct foo
{
int a;
int b;
};
struct foo *pBar = malloc(sizeof(struct foo));
pBar->a = 17;
pBar->b = 42;
P.S. Dopuščam možnost, da kar sem napisal ni čisti C
Otroška radovednost - gonilo napredka.
OwcA ::
@demokedes: prej sem pozabil opozoriti, da moraš zaseden spomin po uporabi ročno sprostiti z free(), nadvse priporočljivo pa je potem še "usmeriti" kazalec na 0;
...
free(pBar);
pBar = 0;
Otroška radovednost - gonilo napredka.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Niti - segmentation faultOddelek: Programiranje | 1994 (841) | galu |
» | [C] struct in int[] (strani: 1 2 )Oddelek: Programiranje | 7375 (6448) | MrBrdo |
» | strcpy reče segmatation faultOddelek: Programiranje | 1505 (1456) | MasterMind |
» | C++ vs. C (strani: 1 2 )Oddelek: Programiranje | 6877 (5868) | rokpok |
» | Pomoč pri c++ razlagaOddelek: Programiranje | 2326 (2068) | Person |