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 ?
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ć.
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ę.
Na przykład możesz w sytuacji przepełnienia utworzyć nowy, większy bufor, przepisać do niego elementy poprzedniego i dodać nowy element.
Jeśli to C++, to używaj string
a lub vector
a, one same swój bufor powiększają w razie potrzeby...
Jest nawet przykład w dokumentacji: http://www.cplusplus.com/reference/cstdio/scanf/
char str [80];
printf ("Enter your family name: ");
scanf ("%79s",str);
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);