int N 8;
char str_[N + 1];//подстрока
str_[N] = '\0';
unsigned char* buffer;//строка
int i = 0;
while (i<=strlen((char*)buffer))
{
strncpy_s(str_, (char*)(buffer+i), N);
i += 8;
}
Евгений Петряев, Понятней не стало.
Какая цель пробежки? Что надо делать на каждой итерации пробежки? Что должно быть на выходе алгоритма?
Сейчас вы просто копируете каждые 8 байт входного буфера в промежуточный. При этом на выходе остается только последний кусок.
В целом ваш код вполне пробегается по буферу, только вам нужно учитывать, что длина буфера не обязательно кратна 8 байтам, поэтому последний участок буфера нужно обрабатывать отдельно. Сейчас у вас выход за границы буфера при чтении последнего блока из 8 байт, если длина буфера не кратна 8.
strncpy_s — опять кто-то пишет на Visual C++. Функцию заменить, см. ниже
Сейчас длина буфера пересчитывается каждый раз в цикле — без комментариев
Если это не строка, а буфер, то он не должен заканчиваться на \0, и для него не должны работать строковые операции. Для подстроки нужно выделить ровно 8 байт. Размер большого буфера нужно взять откуда-то отдельно, не через strlen. Для копирования использовать std::copy
Пусть подстрока будет тоже unsigned char. char должен использоваться для текста, а не для байтов