Код имеет неопределенное поведение. Когда вы делаете что-то вроде этого:
char ifsw1w[3];
ifsw1 >> ifsw1w;
operator>>
получает указатель на буфер, но не имеет представления о его реальном размере. Таким образом, он не может знать, что он должен прекратить чтение после двух символов (и учтите, что это должно быть 2, а не 3 - ему нужно место для '\0'
для завершения строки).
Итог: в вашем исследовании способов чтения данных этот код, вероятно, лучше всего игнорировать. Все, что вы можете узнать из кода, вот несколько вещей, которые вы должны избегать. Однако, как правило, легче просто следовать нескольким эмпирическим правилам, чем пытаться изучить все проблемы, которые могут возникнуть.
- Используйте
std::string
для чтения строк.
- Используйте только буферы фиксированного размера для данных фиксированного размера.
- Когда вы используете фиксированные буферы, передавайте их размер, чтобы ограничить объем считываемой информации.
Если вы хотите прочитать все данные в файле, std::copy
может избежать множества ошибок:
std::vector<std::string> strings;
std::copy(std::istream_iterator<std::string>(myFile),
std::istream_iterator<std::string>(),
std::back_inserter(strings));