[C] problem
Moderator/ica: Moderatori/ce
Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
- Medojedni jazavac
- Postovi: 1536
- Pridružen/a: 22 tra 2012, 08:55
- Spol: M
- OS: eOS Luna
- Lokacija: ForHill Croatia
- Kontakt:
Re: C problem
pa to je isto: char ip[] i char *ip. moze samo stavit const, ili ka inicijlaizirat kao string pa ce automatski biti const jer ne bude spremljen na stogu
stefan je napisao/la:tu mač gemišta
To understand recursion, you must first understand recursion.
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: C problem
To sam i napisao. Ali kad šalje ip[] funkciji, šalje po vrijednosti a pointerom šalje samo pointer na readonly string koji pokušava u funkciji promijeniti što se ne smije. Osim toga razlika je kod fgets() jer koristi sizeof() umjesto strlen() (koje mora za pointerski slučaj). zato je najlakše samo da zamijeni s poljima umjesto const char pointera a ostalo ostane isto.
Zadnja izmjena: jurastublic, dana/u 13 sij 2013, 21:38, ukupno mijenjano 2 puta.
"Hodor bre foobar"
Re: C problem
Sad meni nije nesto jasno, posto je ovaj kod treba da ide u neki modul za aplikaciju, ja korisim njihove promenljive i oni su npr za script_path stavili da je buffer* type, a meni u funkciji check_ip() , sprintf ocekuje char...sta raditi?
isto je i sa fopen, ja saljem njemu buffer data type i izbacuje mi warning?
Da budem jasan, module radi, samo me ta 2-3warninga nerviraju.
A i malo mi je problem da radim test, jer moram onda recomplie app pa vamo namo inace bi se ja igrao sa tim i ispitivao sta ako..
isto je i sa fopen, ja saljem njemu buffer data type i izbacuje mi warning?
Da budem jasan, module radi, samo me ta 2-3warninga nerviraju.
A i malo mi je problem da radim test, jer moram onda recomplie app pa vamo namo inace bi se ja igrao sa tim i ispitivao sta ako..
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: C problem
Pa pitaj njih kakav je buffer tip. To nije osnovni tip već neka struktura. Iz ovoga šta si pokazao se ne vidi.
"Hodor bre foobar"
Re: C problem
pa i meni bilo cudno, no prateci kod (pomoc IDE-a)
dosao sam do fajla "buffer.h" koji u sebi sadrzi
Posto sma rekao da nisam bas vican C-u ...jel sam dobro nasao?
dosao sam do fajla "buffer.h" koji u sebi sadrzi
Kod: Označi sve
typedef struct {
char *ptr;
size_t used;
size_t size;
} buffer;
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: C problem
if (file = fopen(s->script_path, "r")) {
U ovome bi 's' trebao biti pokazivač na buffer a ne script_path.
Znači
struct buffer *s;
if (file = fopen(s->ptr, "r")) {
edit dodatak: ne vidi se za šta tu treba script_path. To je problem kada netko pošalje samo djeliće programa. Bolje poslati cijeli modul na http://pastebin.com a ovdje samo link. Ovako se svi samo muče, a forum se zatrpava nepotrebnim nagađanjem.
U ovome bi 's' trebao biti pokazivač na buffer a ne script_path.
Znači
struct buffer *s;
if (file = fopen(s->ptr, "r")) {
edit dodatak: ne vidi se za šta tu treba script_path. To je problem kada netko pošalje samo djeliće programa. Bolje poslati cijeli modul na http://pastebin.com a ovdje samo link. Ovako se svi samo muče, a forum se zatrpava nepotrebnim nagađanjem.
Zadnja izmjena: jurastublic, dana/u 14 sij 2013, 08:43, ukupno mijenjano 3 puta.
"Hodor bre foobar"
Re: C problem
Mudar ovaj @jurastublic
imas pivo 
umesto s->script_path treba da stoji s->script_path->ptr
sad mi ne daje nikakv warning
Hvala svima
Sad mi ostalo jos da ubacim u app recomplie i da vidim dal ce da radi i dalje
umesto s->script_path treba da stoji s->script_path->ptr
sad mi ne daje nikakv warning
Hvala svima
Sad mi ostalo jos da ubacim u app recomplie i da vidim dal ce da radi i dalje
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: C problem
imam neki cudan problem
I kao sto vidite ta funkcija vraca ili jedan ili nula...problem je sto onaj IF sto proverava "res" nekad 1 tumaci kao 0, a 0 kao 1...
Nije mi jasno zasto, da nije mozda zato to string pretvaram u int?
Kod: Označi sve
res = check_ip(remote_ip, p->conf.script_path->ptr);
if (( res != 1)) {
#sta ako nije ...
}
Kod: Označi sve
int check_ip(const char* ip, const char* path) {
char command[4096];
char out[4096];
char str[10];
char* res;
int rs;
sprintf(out, "%s %s\n", path, ip);
strcat(command, out);
FILE *fp = popen(command, "r");
while (fgets(str, sizeof (str), fp) != NULL) {
res = str;
}
pclose(fp);
rs = atoi(res);
if (rs == 1) {
return 1;
} else {
return 0;
}
}
Nije mi jasno zasto, da nije mozda zato to string pretvaram u int?
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: C problem
Vjerojatno ti atoi vraća nulu i kad naiđe na pogrešku. Evo, napisao sam ti nešto što sigurno radi (jer sam provjerio).
I malo sam počistio kod jer imaš puno nepotrebnih stvari u njemu.
check_ip():
i main():
edit: ups sry, falio mi je razmak kod sprintf(outpath... 
I malo sam počistio kod jer imaš puno nepotrebnih stvari u njemu.
check_ip():
Kod: Označi sve
int check_ip(const char* ip, const char* path) {
char outpath[4096];
char strbuf[2];
FILE *fp;
sprintf(outpath, "%s %s\n", path, ip); //OK, spoji ip i path u out sa razmakom izmedju
fp = popen(outpath, "r");
if (fgets (strbuf,sizeof (strbuf), fp) != NULL) {
// provjeri ulaz PRIJE atoi() jer atoi() je sranje, on vraća nulu i kad naiđe na pogrešku
// - to te može zafrknut ako ti je nula ispravna vrijednost za povratak
if (strcmp(strbuf, "0") == 0 || strcmp(strbuf, "1") == 0){
pclose(fp); //zatvori fajl prije returna !!!
return atoi(strbuf);
}
else printf("pogreška na ulazu");
return -1; //ako nije 1 ili 0 vrati negativni broj jer je nula u redu
}
}
Kod: Označi sve
int main(void) {
int res; //zamijeni ip i path kako tebi odgovara
char ip[]="192.168.1.88";
char path[]="/path_taj_i_taj";
res = check_ip(ip, path);
if (res == 1) //radi 1; //budi specifičan u testovima jer se u tome lako zezneš
if (res == 0) //radi 0; //s povratnim vrijednostima - nikad ne znaš šta može uletit
else //radi nešto treće;
return 0;
}"Hodor bre foobar"