Нужно использовать либо cin.get, либо cin.getline (если нужно вводить строку с пробелами) - обе функции позволяют указать размер принимающего буфера и поставят завершающий 0 в последний символ строки.
#include
using namespace std;
int main() {
char c[10];
cin.get(c, 10);
//cin.getline(c, 10);
cout
НЕДОПУСТИМО использование для ввода конструкций вида char c[10];
cin >> c;
// или же
scanf("%s", &c); Это очень серьезная уязвимость, позволяющая атакующему провести атаку переполнением буфера с последующим выполнением произвольного кода в системе с правами пользователя, от имени которого запустили программу. Вообще, если что-то пишет в буфер не отслеживая его переполнение то это что-то должно пойти фтопку.
Безопасные методы ввода либо используют данные о размере буфера read( fd, buf, BUF_SIZE );
fgets( buf, BUF_SIZE, stdin );
std::cin.getline( buf, BUF_SIZE ); либо используют динамическое выделение памяти (это удобно но менее надежно, так как атакующий может вызвать крах программы, сбросив ей на вход данные очень большого размера) std::string line;
std::getline( std::cin, line ); или так int main( int argc, char* argv[] )
{
char* s = NULL;
printf("Пример ввода строки при помощи scanf:\n");
// Модификатор m приводит к тому, что место для строки
// выделяется в динамической памяти
scanf( "%ms", &s );
if( s )
{
printf( "Введена строка: '%s'\n", s );
// Освободим выделенную scanf память
free( s );
}
else
{
perror("scanf");
}
return 0;
}