Подстрока C++, кажется, указывает на неправильное место

Я читаю текстовый файл с C++. Так как я новичок в C++, я добавил кучу операторов cout, чтобы посмотреть, как себя ведут. Я получил вывод, для которого я не нашел объяснения, и, надеюсь, кто-то здесь может указать мне на какой-нибудь соответствующий текст.

  1. Я читаю строчку
  2. Распечатать строку
  3. Выведите первые 2 символа в строке с помощью substr ()
  4. Скопируйте строку в рабочую область ("mybuffer")
  5. Распечатать подстроку моей рабочей области длиной 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-й символ в вашем файле является / это умещается в один байт.

Другие вопросы по тегам