int strl = strlen(e->event.msg.message);
int strw = 0;
float strzl = strl * 0.001;
int czas = time(NULL);
char* buff;
buff = malloc(sizeof(char*)); // zmienione z char buff[512]; ale i tak nie działało
sprintf(buff, “update userzy set znaki = znaki + %i, wyrazy = wyrazy + %i, wiadomosci = wiadomosci + 1, xp = xp + %i, zl = zl + %i, czas = %i where numer = %i”, strl, strw, strl, strzl, czas, u->numer);
mysql_query(&conn, buff);
naruszenie ochrony pamięci w linijce sprintf
Rezerwuje miejsce w pamięci dla jednego znaku (char)? Żadna filozofia.
Natomiast malloc(sizeof(char) * 512) zarezerwuje nam miejsce dla tablicy z 512 elementami czyli indeksowanymi od 0 do 511, przy czym jeśli będziesz chciał zapisać do niej cstringa to możesz zapisać maksymalnie 511 swoich znaków ponieważ na końcu musisz mieć znak końca cstringu czyli na elemencie tablicy o indeksie 511 (512 element listy).
Pomijam już fakt, że samo zapytanie sql jest prawdopodobnie błędne, na 100% nie powiem bo nie znam struktury tabeli.
EDIT:
Sorki masz rację, teraz zauważyłem że rezerwuję pamięć w niewłaściwy sposób, umknęła mi *. Powiem szczerze, że nawet nie wiem w takim ile pamięci będzie zarezerwowanej, nawet nie próbuję zgadywać. Fakt jest taki że w poprzednim wpisie miałem na myśli malloc(sizeof(char))