Я полагаю, вы неправильно прочитали документацию basic_string::copy
. С этой страницы :
size_type copy( Char* s, size_type count, size_type index = 0 ) const;
Копирует количество символов с позиции, начиная с индекса до заданной строки символов s. Результирующая строка не заканчивается NULL.
Вы используете первый параметр правильно (buffer
, будучи массивом символов, он будет затухать до указателя на символ при передаче аргумента функции), но ваш второй и третий аргументы не являются:
size_type count
- количество копируемых символов: вы предоставляете 0, а вам кажется, что вы хотите 5
size_type index
- начальный индекс для копирования символов: вы предоставляете 5, в то время как вам, очевидно, нужно 0 (скопируйте count
символов с начала строки). Параметр по умолчанию имеет значение аргумента 0: здесь не нужно указывать какое-либо значение.
В конце концов, вы можете сделать:
const size_t window = bignumber.copy(buffer, sizeof(buffer));
Обратите внимание, что я использовал sizeof(buffer)
вместо магического значения 5, чтобы избежать появления ошибки, если размер buffer
изменяется без учета изменения этого вызова. Также имейте в виду, что buffer
не может быть просто выведен в std::cout
после вызова copy
, потому что это не завершенная нулем строка.
Теперь, если работа только с std::string
является опцией (и в большинстве случаев так и должно быть), вы также можете использовать basic_string::substr
:
basic_string substr( size_type index = 0, size_type count = npos ) const;
Возвращает подстроку текущей строки, начиная с заданного индекса позиции и имеющей длину счетных символов.
Например:
const std::string substring = bignumber.substr(0, 5);
Вопреки решению copy
, здесь не возникает проблем с размером, и результат может быть выведен в std::cout
без проблем. Другими словами: это намного безопаснее.