PARTNERI:

* Marketing

-UPOZORENJE-

Samo registrovani članovi mogu da vide/koriste forum u celini.
Prijavite se ili registrujte nalog na Balkan SA-MP forumu.


Autor Tema: [Rešeno] Problem sa sscanf  (Pročitano 225 puta)

0 članova i 1 gost pregledaju ovu temu.

Van mreže .Drakula.

Problem sa sscanf
« poslato: Avgust 10, 2018, 00:31:33 pre podne »
Problem(error/warning): Imam problem sa ssanf. Nisam bas nesto naucio oko njega, jos uvek ucim. Izbauje mi Debug, kod je dole.
Problem je u liniji:            if(sscanf(params, "s[6][4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");          .Moze li mi neko pokazati kako i sta da uradim jer imam na nekoliko mesta u skripti slicnu stvar.

Dio skripte:
Pawno Code: [Izaberi]
       new akcija[6];
       if(sscanf(params, "s[6]", akcija)) return Cmd(playerid, "/agiveall (xp/level/money/gold)");
                if(strfind(akcija, "money", true) != -1)
{
    new kolicina, nacin[4], str[90];
if(sscanf(params, "s[6][4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");
if(kolicina < 1) return Error(playerid, "Ne moze manje od 1.");
    if(!strcmp(nacin, "usd", true))
    {
format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d dolara.", GetNameEx(playerid), kolicina);
SCMTA(-1, str);
for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
    if(UlogovanIgrac[i] == 1) m_GivePlayerMoney(i, kolicina);
}
}
else if(!strcmp(nacin, "eur", true))
{
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d eura.", GetNameEx(playerid), kolicina);
        SCMTA(-1, str);
        for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
            if(UlogovanIgrac[i] == 1) m_GivePlayerEuro(i, kolicina);
        }
    }
}
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): sscanf warning: String buffer overflow.Slika/video ingame problema(obavezno ako je ingame problem): //
« Poslednja izmena: Avgust 12, 2018, 01:03:58 pre podne Bašovski »
 

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #1 poslato: Avgust 10, 2018, 04:05:24 pre podne »
Postavi
Pawno Code: [Izaberi]
new akcija[6+5];

Van mreže bc-cod2

Odg: Problem sa sscanf
« Odgovor #2 poslato: Avgust 10, 2018, 10:31:42 pre podne »
if(sscanf(params, "s[6]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");
 
Korisnici koji su se zahvalili: .Drakula.

Na mreži Sejnur337_

Odg: Problem sa sscanf
« Odgovor #3 poslato: Avgust 10, 2018, 10:42:42 pre podne »
if(sscanf(params, "s[6]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");
Cemu ovo? Bukvalno si iskopirao kod koji je Dragan_Milosavljevic poslao.
Facebook (new): Sejnur
 

Van mreže .Drakula.

Odg: Problem sa sscanf
« Odgovor #4 poslato: Avgust 10, 2018, 14:17:23 posle podne »
Nije isto kod.

Moj:
if(sscanf(params, "s[6][4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");

buLLeT_:
if(sscanf(params, "s[6]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");

Komanda radi, daje usd normalno i daje eur normalno ali mi baca
sscanf warning: String buffer overflow.
 

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #5 poslato: Avgust 10, 2018, 15:56:14 posle podne »
Nije isto kod.

Moj:
if(sscanf(params, "s[6][4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");

buLLeT_:
if(sscanf(params, "s[6]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");

Komanda radi, daje usd normalno i daje eur normalno ali mi baca
sscanf warning: String buffer overflow.
Je si li uradio ovo sto ti rekoh? Probaj staviti vrednost akcije vece od same nje

Van mreže .Drakula.

Odg: Problem sa sscanf
« Odgovor #6 poslato: Avgust 10, 2018, 16:20:13 posle podne »
Je si li uradio ovo sto ti rekoh? Probaj staviti vrednost akcije vece od same nje
Uradio sam ovako:
Pawno Code: [Izaberi]
new akcija[15];
       if(sscanf(params, "s[15]", akcija)) return Cmd(playerid, "/agiveall (xp/level/money/gold)");
                if(strfind(akcija, "money", true) != -1)
{
    new kolicina, nacin[4], str[98];
if(sscanf(params, "s[15]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");
if(kolicina < 1) return Error(playerid, "Ne moze manje od 1.");
                        if(kolicina > 999999) return Error(playerid, "Ne moze vise od 999.999.");
    if(!strcmp(nacin, "usd", true))
    {
format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d dolar/a.", GetNameEx(playerid), kolicina);
SCMTA(-1, str);
for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
    if(UlogovanIgrac[i] == 1) m_GivePlayerMoney(i, kolicina);
}
}
else if(!strcmp(nacin, "eur", true))
{
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d euro/a.", GetNameEx(playerid), kolicina);
        SCMTA(-1, str);
        for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
            if(UlogovanIgrac[i] == 1) m_GivePlayerEuro(i, kolicina);
        }
    }
}
Sada komanda radi sasvin normalno i ne baca nikakav error ili warning.
Ali kao sto gore vidis napravio sam limit
Pawno Code: [Izaberi]
if(kolicina < 1) return Error(playerid, "Ne moze manje od 1.");
          if(kolicina > 999999) return Error(playerid, "Ne moze vise od 999.999.");
To mi nedozvoljava da dam igracima manje od 1 i vise od 999.999 dolara ili evra.
Ali iznad limita je
Pawno Code: [Izaberi]
if(sscanf(params, "s[15]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");Pa ako ja ukucam /agiveall monej usd 9999999999
meni izbaci error da ne mogu dati vise od 999.999 ali mi baci warning
Pawno Code: [Izaberi]
sscanf warning: String buffer overflow.
 

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #7 poslato: Avgust 10, 2018, 16:25:48 posle podne »
Uradio sam ovako:
Pawno Code: [Izaberi]
new akcija[15];
       if(sscanf(params, "s[15]", akcija)) return Cmd(playerid, "/agiveall (xp/level/money/gold)");
                if(strfind(akcija, "money", true) != -1)
{
    new kolicina, nacin[4], str[98];
if(sscanf(params, "s[15]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");
if(kolicina < 1) return Error(playerid, "Ne moze manje od 1.");
                        if(kolicina > 999999) return Error(playerid, "Ne moze vise od 999.999.");
    if(!strcmp(nacin, "usd", true))
    {
format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d dolar/a.", GetNameEx(playerid), kolicina);
SCMTA(-1, str);
for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
    if(UlogovanIgrac[i] == 1) m_GivePlayerMoney(i, kolicina);
}
}
else if(!strcmp(nacin, "eur", true))
{
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d euro/a.", GetNameEx(playerid), kolicina);
        SCMTA(-1, str);
        for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
            if(UlogovanIgrac[i] == 1) m_GivePlayerEuro(i, kolicina);
        }
    }
}
Sada komanda radi sasvin normalno i ne baca nikakav error ili warning.
Ali kao sto gore vidis napravio sam limit
Pawno Code: [Izaberi]
if(kolicina < 1) return Error(playerid, "Ne moze manje od 1.");
          if(kolicina > 999999) return Error(playerid, "Ne moze vise od 999.999.");
To mi nedozvoljava da dam igracima manje od 1 i vise od 999.999 dolara ili evra.
Ali iznad limita je
Pawno Code: [Izaberi]
if(sscanf(params, "s[15]s[4]i", akcija, nacin, kolicina)) return Cmd(playerid, "/agiveall money (usd/eur) (kolicina)");Pa ako ja ukucam /agiveall monej usd 9999999999
meni izbaci error da ne mogu dati vise od 999.999 ali mi baci warning
Pawno Code: [Izaberi]
sscanf warning: String buffer overflow.
lool zasto u parametru %i a ne %d? stavi %d pa mi reci sta kaze

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #8 poslato: Avgust 10, 2018, 16:28:55 posle podne »
PS: moja greska
mislio sam na ' "s[15]s[4]i" ' da stavis ovako ' "s[15]s[4]d" '

Van mreže .Drakula.

Odg: Problem sa sscanf
« Odgovor #9 poslato: Avgust 10, 2018, 16:58:34 posle podne »
PS: moja greska
mislio sam na ' "s[15]s[4]i" ' da stavis ovako ' "s[15]s[4]d" '
Razumeo sam sta si hteo da kazes, stavio sam ali se isto ponavlja
Ako ja ukucam /agiveall money usd 9999999999
Izbaci mi
sscanf warning: String buffer overflow.
verovatno cim prekoracim ovo: akcija[15]
Desi se isto kao gore sto sam ti obijasnio.
« Poslednja izmena: Avgust 10, 2018, 16:59:45 posle podne Dragan_Milosavljevic »
 

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #10 poslato: Avgust 10, 2018, 17:04:02 posle podne »
Citiracu Alexa(yless-a): "Actually it means that the string you tried to store in the buffer is longer than the specified string." probaj ga povecati pa vidi debugaj probaj pa javi sta kaze

Van mreže Zile42O

Odg: Problem sa sscanf
« Odgovor #11 poslato: Avgust 10, 2018, 17:04:20 posle podne »
jer sam ja na fonu sad pa cu kada budem PC proveriti kod

Van mreže .Drakula.

Odg: Problem sa sscanf
« Odgovor #12 poslato: Avgust 10, 2018, 17:28:48 posle podne »
Ako mozes da mi pomognes bio bi ti zahvalan.
Meni se desava ovako nesto:
http://forum.sa-mp.com/showthread.php?t=304609

Ako moze neko od iskusnijih da pogleda, ako ne postoji resenje za ovaj problem kako bi mogao da preradim komandu.?
 

Van mreže youngdeal

Odg: Problem sa sscanf
« Odgovor #13 poslato: Avgust 11, 2018, 01:20:31 pre podne »
 evo ti nesto lakse na moj nacin / preradjena komanda,nemam vremena da ti ispravljam tvoju trenutno zurim idem negdje pa sam ti zacas ispisao na moj nacin / preradio komandu, uglavnom stavio sam velicinu sta 15 da mozes stavit moneyusd ili moneyeuro ili money-usd ili money-euro,ja sam stavio monusd i moneuro, mozes izmijenit kako zelis
Pawno Code: [Izaberi]
CMD:agiveall(playerid, params[]) {
new sta[15],kolicina,str[90];
  if(sscanf(params, "s[15]i",sta,kolicina)) return Cmd(playerid, "/agiveall [monusd/moneuro] [kolicina]");
  if(strcmp(sta, "monusd", true) == 0)
  {
  if(sscanf(params, "s[15]i", sta, kolicina)) return Cmd(playerid, "/agiveall [monusd] [kolicina]");
  if(kolicina < 1) return Error(playerid, "Kolicina mora biti veca od 1.");
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d dolara.", GetNameEx(playerid), kolicina);
    SCMTA(-1, str);
  for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
if(UlogovanIgrac[i] == 1) m_GivePlayerMoney(i, kolicina);
}
  }
  if(strcmp(sta, "moneuro", true) == 0)
    {
if(sscanf(params, "s[15]i", sta, kolicina)) return Cmd(playerid, "/agiveall [moneuro] [kolicina]");
  if(kolicina < 1) return Error(playerid, "Kolicina mora biti veca od 1.");
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d eura.", GetNameEx(playerid), kolicina);
    SCMTA(-1, str);
  for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
if(UlogovanIgrac[i] == 1) m_GivePlayerEuro(i, kolicina);
}
}
  return 1;
}
EDIT - obojao za sta & velicinu sta - da skontas bolje / da razumijes bolje
« Poslednja izmena: Avgust 11, 2018, 01:22:24 pre podne youngdeal »
69
 

Van mreže .Drakula.

Odg: Problem sa sscanf
« Odgovor #14 poslato: Avgust 11, 2018, 21:59:22 posle podne »
evo ti nesto lakse na moj nacin / preradjena komanda,nemam vremena da ti ispravljam tvoju trenutno zurim idem negdje pa sam ti zacas ispisao na moj nacin / preradio komandu, uglavnom stavio sam velicinu sta 15 da mozes stavit moneyusd ili moneyeuro ili money-usd ili money-euro,ja sam stavio monusd i moneuro, mozes izmijenit kako zelis
Pawno Code: [Izaberi]
CMD:agiveall(playerid, params[]) {
new sta[15],kolicina,str[90];
  if(sscanf(params, "s[15]i",sta,kolicina)) return Cmd(playerid, "/agiveall [monusd/moneuro] [kolicina]");
  if(strcmp(sta, "monusd", true) == 0)
  {
  if(sscanf(params, "s[15]i", sta, kolicina)) return Cmd(playerid, "/agiveall [monusd] [kolicina]");
  if(kolicina < 1) return Error(playerid, "Kolicina mora biti veca od 1.");
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d dolara.", GetNameEx(playerid), kolicina);
    SCMTA(-1, str);
  for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
if(UlogovanIgrac[i] == 1) m_GivePlayerMoney(i, kolicina);
}
  }
  if(strcmp(sta, "moneuro", true) == 0)
    {
if(sscanf(params, "s[15]i", sta, kolicina)) return Cmd(playerid, "/agiveall [moneuro] [kolicina]");
  if(kolicina < 1) return Error(playerid, "Kolicina mora biti veca od 1.");
    format(str, sizeof(str), ""zuta"(info) "bela"Administrator %s je dao svim igracima po %d eura.", GetNameEx(playerid), kolicina);
    SCMTA(-1, str);
  for(new i = 0; i <= GetPlayerPoolSize(); i++)
{
if(UlogovanIgrac[i] == 1) m_GivePlayerEuro(i, kolicina);
}
}
  return 1;
}
EDIT - obojao za sta & velicinu sta - da skontas bolje / da razumijes bolje
Komanda je ok ali testiraj je i probaj da ukucas /agiveall monusd 99999999 ili /agiveall monusd 999999999
Tada nastaje problem.
Zanima me da li to mooze nekako da se resi, niko nece davati tolike pare ali ako se nadje neka budala da proba, server krene da bode i baca errore i warninge