Mala pomoc u c

2

Mala pomoc u c

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Koliko vidim samo jedna funkcija koristi MENU_TEXT_COLOR (draw_screen_locked). Ako si u mogucnsti da rebuild-ujes celu biblioteku onda bi mogao da menjas boju textu.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Ok, hvala ti puno! Ovo mi malo nije ok, mislim da nece bas valjati, sta ti mislis?
MENU_TEXT_COLOR.r = strtoul(buf, &end, 10);
MENU_TEXT_COLOR.g = strtoul(end, &end, 10);
MENU_TEXT_COLOR.b = strtoul(end, 0, 10);

ako je unsigned long int strtoul ( const char * str, char ** endptr, int base );
i ona klasa gore gde si definisao rgb kao bute.

Dali mozda znas koja je funkcija u c ekvivalent funkciji subst u php, trazio sam na netu ne mogu da nadjem neku da moze da zameni substr?
php.net/manual/en/function.substr.php

na primer sta ako user ne napravi dobro txt fajl tj stavi vise razmaka nego sto treba ili ne napravi razmak, kako bi moglo da se uradi na primer neki "trim" pa na primer kao u php sto je php.net/manual/en/function.explode.php pa na primer da proverim dali je ukucao brojeve ili je ukucao slova php.net/manual/en/function.is-numeric.php ...ovaj c je stvarno neverovatno komplikovan jezik



offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

1. Bice "okrnjen" rezlutat, u textualnom fajlu moras da pazis da ne kucas brojeve koji su manji od 0 ili veci od 255 i to da idu 3 za redom podeljeni jednim space karakterom. Znaci ne bi radilo ovako nesto:
Citat:
deda mraz
0
-55 6841112844
bezveze 18

Na tebi je kako ces da parsujes text i proveravas greske koje su moguce unosom korisnika u taj fajl.

2. Mislim da nema ekvivalentna standardna funkcija (nisam siguran). Morao bi da pravis svoju verziju pomocu recimo strncpy

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Hehe, hvala ti u svakom slucaju na pokusaju, razumem te sta kazes, i dao si mi ideju kako da to odradim! Dali bi samo hteo da se vratis ovde sa komentarom u vezi dela coda koji cu da pokusam napraviti onako kako sam zamislio, kad ga napravim i napisem ovde? Pokusacu da napravim neke filtere na "user" text

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Nema problema.
Pokusacu da ti napravim substr funkciju slicnu onoj iz php-a.

Evo ti jedan interesantan link.

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Hvala za link! Evo nesto sam poceo malo da radim ali i dalje ne kontam bas najbolje kako da to odradim. Na primer nesto na ovaj fazon bi bilo dobro:

char *substr(const char *str, size_t begin, size_t len) {   if (str == 0 || strlen(str) == 0 || strlen(str) < begin || strlen(str) < (begin+len))     return 0;   return strndup(str + begin, len); } char str[] = "0,234,128"; //r,g,b char keys[] = "\2c"; //zarez u hex formatu size_t one = 0; size_t two = 0; size_t len = strlen(str); size_t i; //default colors char rgb_boja[0][1] = "0"; char rgb_boja[1][3] = "122"; char rgb_boja[2][3] = "255"; if (len) {     for (i=0; i<len; i++)     {         if (str[i] == keys)             one += 1;         two += i;         rgb_boja[one][two] = str[i];     }         if (rgb_boja[0] != NULL && strtoi(rgb_boja[0]) <= 255) char *r = substr(rgb_boja[0], 0, strlen(rgb_boja[0]));     if (rgb_boja[1] != NULL && strtoi(rgb_boja[1]) <= 255) char *g = substr(rgb_boja[1], 0, strlen(rgb_boja[1]));     if (rgb_boja[2] != NULL && strtoi(rgb_boja[2]) <= 255) char *b = substr(rgb_boja[2], 0, strlen(rgb_boja[2])); }

Sta mislis?

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

1. Ne razumem zasto ti se ne svidja strtoul?

2. Ne znam gde si nasao "strndup" funkciju? Da nisi mislio na "strdup"? U svakom slucaju ja ne bih ni jednu od tih koristio.

Sad hoces sa delimiterom (zapeta)?

Koji kompajler koristis? Mozda bi jednostavno mogao mixovati C++ standardne klase sa C-om kao sto su stringstream, string i regex?

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Pozz, strndup sam nasao ovde a kompajler je cross kompajler arm-eabi- koji koristim za kompilaciju kernela i nekih android stvari kao na primer ovo sto sam radio za android. Delimiter zarez sam mislio da iskoristim da user stavi txt u formatu 2,244,221 na primer a i da bih mogao da iskoristim to da presecem array u novi

Ne razumem bas najbolje onaj tvoj primer sa strtoul posto si tamo definisao bute umesto *char a i ne razumem onu definiciju za base i vrednost 10 koju si stavio. Nebi da mixujem c++ posto radim u cistom c u kernel sourcu...

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Citat:
Delimiter zarez sam mislio...

Mnogo je lakse sbez zareza.

Ako ovako izgleda iplementacija strndup-a onda treba da obratis paznju jer ta funkcija alocira memoriju sa malloc pa bi trebalo da je oslobodis sa "free" funkcijom kad zavrsis sa tim pokazivacem da ne bi ima "curenje" memorije.

Ceo tvoj kod koji si postavio je pogresan. Izvadicu samo par fragmenata:
//default colors char rgb_boja[b][0][/b][1] = "0"; // WTF? char rgb_boja[1][3] = "122"; char rgb_boja[2][3] = "255";
Zasto koristis dvodimenzione nizove?

//ovako char boje[3][4] = { {"0"}, {"231"}, {"196"} } ; // default boje ...boje[0] //r ...boje[1] //g ...boje[2] //b // ili ovako char boja_r[] = "0"; char boja_g[] = "231"; char boja_b[] = "196"; // ili direktno kao sto sam ti gore stavio da // ne bi dzabe parsovao stringove typedef struct {    byte r;    byte g;    byte b; }RGB_COLOR; RGB_COLOR color = { 0, 191, 255 }; ... ...gr_color(color.r, color.g, color.b);

Definisao sam byte (unsigned char) jer i funkcija gr_color trazi tog tipa parametre?

Citat:
...ne razumem onu definiciju za base i vrednost 10 koju si stavio.


hexadecimalni = baza 16 ( 0, 1, 2... 9, A, B, C, D, E, F)
decimalni = baza 10 ( 0, 1, 2... 9)
binarni = baza 2 (0, 1)

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Da, unsigned char u gr_color. Ok, pregledacu malo ovo tvoje da malo bolje razumem, mada opet mi je nesigurno, sta ako user ne napravi txt kako treba, dali ce biti "curenje" i dali ce se desiti greska u programu, nebi da program "zakuca" ako nije podesen gr_color prilikom initializacije? Aj samo mi reci dali valja nesto ovako na primer:
char *substr(const char *str, size_t begin, size_t len) {     if (str == 0 || strlen(str) == 0 || strlen(str) < begin || strlen(str) < (begin+len))         return 0;         return strndup(str + begin, len); } char str[] = "0,234,128"; //r,g,b  ovo sam stavio bezveze, mada ovo ce biti iz fajla! char keys[] = "\2c"; //zarez u hex formatu size_t one = 0; size_t two = 0; size_t len = strlen(str); size_t i;   char rgb_boja[3][4]; char *r = (char *)malloc(3); char *g = (char *)malloc(3); char *b = (char *)malloc(3); if (len) {     for (i=0; i<len; i++)     {         if (str[i] == keys)             one += 1;         two += i;         rgb_boja[one][two] = str[i];     }         if (rgb_boja[0] != NULL && strtoi(rgb_boja[0]) <= 255)         r = substr(rgb_boja[0], 0, strlen(rgb_boja[0]));     else         r = "0";     if (rgb_boja[1] != NULL && strtoi(rgb_boja[1]) <= 255)         g = substr(rgb_boja[1], 0, strlen(rgb_boja[1]));     else         g = "122";     if (rgb_boja[2] != NULL && strtoi(rgb_boja[2]) <= 255)         b = substr(rgb_boja[2], 0, strlen(rgb_boja[2]));     else         b = "255"; } free(rgb_boja);

Ko je trenutno na forumu
 

Ukupno su 1362 korisnika na forumu :: 37 registrovanih, 7 sakrivenih i 1318 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Rade, A.R.Chafee.Jr., bladesu, Brana01, ccoogg123, debeli, DeerHunter, Dimitrije Paunovic, dragoljub11987, ekser222, Georgius, hyla, ILGromovnik, ivan1973, Krusarac, Kubovac, lord sir giga, Lucije Kvint, Lukaaa, Mercury, milan.vukovic, nebkv, nemkea71, oldtimer, Panter, Parker, Pikac-47, royst33, S2M, slonic_tonic, ss10, taz1cl, Volkhov-M, VP6919, yufighter, Zandar, 79693