Code: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char a[5]; ReadString("Input: ", a); printf("Value: %s\n", a); system("PAUSE"); return 0; } int ReadString(char *prompt, char *ret) { printf(prompt); scanf("%s", ret); fflush(stdin); return 0; } Всегда забываю, как грамотно делать хранение переменных в C++. Поэтому решил разобраться с этой темой подробно. Пишу функцию для ввода строки из консоли (нужно для курсовика). Алгоритм такой: 1. Объявить буфер для ввода, размером в максимально возможное значение. 2. Передать указатель на буфер в функцию. 3. В функции принять значение из консоли в буфер 4. Вывести значение из буфера в консоль. Приведенный код работает, но даже тогда, когда вводится значение, длина которого превышает размер буфера. Отсюда вопросы: я не понимаю как работает код? Или где тогда хранится оставшаяся часть введенной строки? Объясните, просветите =) Сильно не пинайте, ну не умею я еще в уме трассировать C++. Мне ведь самому интересно как он работает на самом деле. А еще лучше ответьте как сделать ввод из консоли правильнее.
так как переменная локальная, лишние символы хранятся на стеке. т.е. ты получаешь переполнение буфера, и при умелом использовании можешь засплоитить свою программу, заставив ее показать месаджбокс например. Суть C++ что контроль длины буфера в чистых массивах лежит на тебе. Поэтому и используют функции вида strncpy вместо strcpy. ps: для лучшего понимания запусти свою программу под отладкой в ollydbg и посмотри, что произойдет со стеком.