Kurs programowania w C cz. 119

Nasza ocena:

5
Wyświetleń: 518
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C  cz. 119 - strona 1

Fragment notatki:

136 ROZDZIAŁ 18. NAPISY Bezpiecznymi alternatywami do strcpy i strcat są też funkcje strlcpy oraz strlcat opra- cowana przez projekt OpenBSD i dostępna do ściągnięcia:  strlcpy,  strlcat.  strlcpy() działa podobnie do strncpy: strlcpy (buf, argv[1], sizeof buf);, jednak jest szybsza (nie wy- pełnia pustego miejsca zerami) i zawsze kończy napis nullem (czego nie gwarantuje strncpy). strlcat(dst, src, size) działa natomiast jak strncat(dst, src, size-1). Do innych niebezpiecznych funkcji należy np.  gets  zamiast której należy używać  fgets. Zawsze możemy też alokować napisy  dynamicznie: #include  #include  #include  int main(int argc, char **argv) { char haslo_poprawne = 0; char *haslo; if (argc!=2) { fprintf(stderr, "uzycie: %s haslo", argv[0]); return EXIT_FAILURE; } haslo = malloc(strlen(argv[1]) + 1); /* +1 dla znaku null */ if (!haslo) { fputs("Za malo pamieci.\n", stderr); return EXIT_FAILURE; } strcpy(haslo, argv[1]); if (!strcmp(haslo, "poprawne")) { haslo_poprawne = 1; } if (!haslo_poprawne) { fputs("Podales bledne haslo.\n", stderr); return EXIT_FAILURE; } puts("Witaj, wprowadziles poprawne haslo."); free(haslo) return EXIT_SUCCESS; } Nadużycia z udziałem ciągów formatujących Jednak to nie koniec kłopotów z napisami. Wielu programistów, nieświadomych zagrożenia często używa tego typu konstrukcji: #include  int main (int argc, char *argv[]) { printf (argv[1]); } Z punktu widzenia bezpieczeństwa jest to bardzo poważny błąd programu, który może nieść ze sobą katastrofalne skutki! Prawidłowo napisany kod powinien wyglądać następująco: ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz