Jump to content

ionut.hulub

Active Members
  • Posts

    280
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by ionut.hulub

  1. mersi. o sa incep sa invat. ne auzim in cateva luni
  2. util script. as vrea sa invat si eu python. mentionez ca am destula experienta cu c/c++. sti vreo carte care sa ma ajuta si sa nu ma ia chiar de la 0?
  3. arata super bine. consuma mult mai multe resurse decat originalu?
  4. Raspuns gresit. Ca sa intelegem de ce, sa vedem in primul rand cum se represinta o variabila de tip int in memoria calculatorului: int'ul se scrie pe 32 de biti. sa luam numarul 11: 0000..00001011. dar 11 * 2 = 22 care se scrie: 0000... 00010110. dar 22*2 = 44 care se scrie: 000....000101100. observam ca inmultirea unui numar cu 2 este echivalenta cu shiftarea numarului cu 1 bit la stanga. numarul 4 scris in binar este : 000...0000100. rezulta din cele scrise mai sus ca dupa 30 de inmultiri cu 2, rezultatul o sa fie egal cu ce obtinem daca shiftam numarul 4 la stanga cu 30 de pozitii, adica 000...000 care este egal cu 0, si asta este ceea ce va afisa programul.
  5. Raspuns gresit. Sa vorbim putin despre cum aloca calculatorul memoria in functia void fct(char s[256], int i); Vedem ca primul argument este char s[256] si probabil va asteptati sa aloce 256*sizeof(char) adica 256 de octeti, dar defapt, aia este memoria MAXIMA care ii este permis sa o aloce. Memoria care o va aloca la fiecare rulare a functiei depinde de ce argument ii este trimis. In cazut nostru, ii este trimis un vector ce 17 caractere (16 din sir si '\0' pentru sfarsit de sir), deci va aloca doar 17*sizeof(char) => la a doua iteratie a forului va incepe sa scrie intr'o zona de memorie care nu ii este alocata vectorului, si va suprascrie adresa instructiunii la care trebuie sa se intoarca programul dupa ce termina de rulat functia, ceea ce va genera o eroare de tip "buffer overflow".
  6. raspunsul lui Nytro este corect. Modifi putin datele problemei: void fct(char s[256], int i) { int y; int contor = 0; for (y = i; y < strlen(s) + i; y++) s[y] = s[contor++]; } int main() { int i; char sir[17]; strcpy(sir, "SimpleCChallange"); for (i = 0; i < strlen(sir); i++); fct(sir, i); printf("%s", sir); return 0; } acum?
  7. Raspuns corect! Challange closed
  8. imi cer scuze. acum am modificat codul. am uitat sa pun 'unsigned' prima data.
  9. Se da codul: unsigned int i = 4; for (; i > 2; i*=2); printf("%d", i); Da eroare? Daca da, ce eroare? Daca nu, ce afiseaza?
  10. Se da codul: int i = sizeof(int) + sizeof(char*) * sizeof(void*) + sizeof(char); printf("%d", i/4); Da sau nu eroare? Daca da, ce eroare? Daca nu, ce afiseaza?
  11. Se da codul: void fct(char s[256], int i) { int y; int contor = 0; for (y = i; y < strlen(s) + i; y++) s[y] = s[contor++]; } int main() { int i; char sir[17] = "SimpleCChallange"; for (i = 0; i < strlen(sir); i++); fct(sir, i); printf("%s", sir); return 0; } Da sau nu eroare? Daca da eroare, ce eroare? Daca nu da eroare, ce afiseaza?
×
×
  • Create New...