Przepełnienie bufora jak przeciwdziałać?

0

Cześć,
jak można przeciwdziałać przepełnieniu bufora? Dla przykładu mam zmienną char[20] i chcę aby użytkownik podał dane do max 20 znaków .
Co trzeba zrobić jeżeli użytkownik poda ponad 20 znaków ?

0

jak przeciwdziałać?

Nie przepełniać bufora ;​)

Wszystkie sensowne funkcje wczytujące pozwalają na ograniczenie maksymalnej długości wczytywanych danych (albo alokują dynamicznie). Nie chciało Ci się podać języka, więc ciężko precyzyjniej opisać.

0
int main()
{
    char tab[3];

    cin.getline(tab,4);
    cout << tab;
    return 0;
}

Zawsze wczyta tylko trzy znaki, a 4-ty znak to koniec łańcucha "/0" , przynajmniej tak mi się wydaję.

0

Na przykład możesz w sytuacji przepełnienia utworzyć nowy, większy bufor, przepisać do niego elementy poprzedniego i dodać nowy element.

0

Jeśli to C++, to używaj stringa lub vectora, one same swój bufor powiększają w razie potrzeby...

0

Jest nawet przykład w dokumentacji: http://www.cplusplus.com/reference/cstdio/scanf/

  char str [80];
  printf ("Enter your family name: ");
  scanf ("%79s",str);  
0
MarekR22 napisał(a):

Jest nawet przykład w dokumentacji: http://www.cplusplus.com/reference/cstdio/scanf/

  char str [80];
  printf ("Enter your family name: ");
  scanf ("%79s",str);  

Nawet chyba jeszcze lepiej fgets(...).

char str[80];
printf("Enter your family name: ");
fgets(str, sizeof(str) / sizeof(*str), stdin);

https://wiki.sei.cmu.edu/confluence/display/c/STR31-C.+Guarantee+that+storage+for+strings+has+sufficient+space+for+character+data+and+the+null+terminator

1 użytkowników online, w tym zalogowanych: 0, gości: 1