Подстрока C++, кажется, указывает на неправильное место
Я читаю текстовый файл с C++. Так как я новичок в C++, я добавил кучу операторов cout, чтобы посмотреть, как себя ведут. Я получил вывод, для которого я не нашел объяснения, и, надеюсь, кто-то здесь может указать мне на какой-нибудь соответствующий текст.
- Я читаю строчку
- Распечатать строку
- Выведите первые 2 символа в строке с помощью substr ()
- Скопируйте строку в рабочую область ("mybuffer")
- Распечатать подстроку моей рабочей области длиной 10 символов
Проблема: (a) Вывод (3), по-видимому, является escape-последовательностью (непечатные символы). Если я изменю длину подстроки с 2 на 4, я получу один /. (b) Несмотря на то, что содержимое "mybuffer" выглядит правильно (первые два символа действительно //), функция подстроки возвращает только семь (печатаемых) символов.
while( std::getline( file, line ) )
{
foundeq = 0;
clearthis = 0;
mybuffer = line;
cout<< "line>>" << line<<"\n";
cout<<"first 2 chars in line>>"<<line.substr(0,2)<<"\n";
cout<< "mybuffer>>" << mybuffer<<"\n";
cout<<"first 10 chars in mybuffer>>"<<mybuffer.substr(0,10)<<"\n";
Выход:
line>>//--------------------------------------------------
first 2 chars in line>>\357\273
mybuffer>>//--------------------------------------------------
first 10 chars in mybuffer>>//-----
Что здесь происходит??
Заранее благодарю за ваши комментарии.
1 ответ
Короткий ответ
Ваш файл закодирован в UTF-8, и в начале он имеет метку порядка байтов.
Чуть более длинный ответ
Таким образом, ваша консоль печатает первые два числа в восьмеричном виде для вас. 0357 и 0273. Третий символ спецификации UTF-8 - 0277. Предположительно, когда консоль видит эти три символа подряд, она решает не печатать их.
Кроме того, предположительно, 4-й символ в вашем файле является /
это умещается в один байт.