Witam. Nie do końca rozumiem jedną kwestię dotyczącą funkcji strncpy_s(). Dlaczego 4 argument musi być mniejszy od 2. Dla przykładu taki testowy kod:
char x[] = "aaa";
strncpy_s(x, strlen(x), "bbbbbbbbbbbbbbbbbb", strlen(x));
std::cout << x;
Na pierwszy rzut oka powiedziałbym, że skoro określiłem rozmiar bufora jako 3 i ilość skopiowanych znaków jako 3 to funkcja powinna zadziałać poprawnie. strncpy_s nie wykroczy poza zakres łańcucha ani nawet nie zastąpi ostatniego znaku jakim jest NULL. A jednak program crashuje z powodu "zbyt małego buffora". Zrozumiałbym, gdyby sama funkcja z jakiegoś powodu dla bezpieczeństwa nie pozwalałaby określać rozmiaru buffora na mniejszy niż ilość kopiowanych do niego znaków, ale kompilator nawet nie daje ostrzeżeń. Bardzo nie lubię wykorzystywać rzeczy których nie rozumiem w 100%. Z góry dziękuje za wytłumaczenie.