char someArray[n];
std::cin >> someArray; // potential buffer overrun
Я часто встречался с подобным кодом много раз на форумах C ++. Есть ли веские основания для того, чтобы это не рассматривалось как ошибка времени компиляции? или, по крайней мере, предупреждение?
Основная предпосылка с C (и C ++) заключается в том, что кодер должен знать, что они делают. В противном случае они будут кодировать на бейсике 🙂
Не допускается ошибка, так как это разрешено в соответствии со стандартом, как gets
а также scanf("%s")
разрешены в C, несмотря на то, что они проблемы, ожидающие, чтобы произойти.
Код, который вы разместили является плохо и не имеет места в серьезном программном обеспечении, но это хорошо для «игрушечных» программ или тестирования вещей. Вам просто нужно знать о его проблемах (и это звучит очень похоже на вас являются знать о них).
Если бы C ++ был изобретен одним махом, он, вероятно, вообще не существовал бы — если вы хотите прочитать строку, вам придется прочитать ее в std::string
и это было бы концом этого.
К сожалению, C ++ использовался довольно давно std::string
был стандартизирован (или изобретен вообще). И то и другое operator>>
а также istream::getline
(не путать с std::getline
) были изобретены за это время. Когда они были изобретены, реальной альтернативы было мало (или нет), поэтому они работали с массивами char.
Сегодня, конечно, есть альтернативы, и лучше просто избегать их, если вы не застряли в написании кода с каким-то древним компилятором, который не поддерживает превосходные альтернативы.