как усечь первые несколько символов в массиве символов Переполнение стека

у меня есть char array называется names[50]

В основном я использую

strncpy(this->names, names, sizeof(names))

однако это будет только обрезать символы в конце.

Как мне обрезать символы с самого начала?

Например, BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge должно быть teveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge

0

Решение

Если я правильно понял, то используя строку, которую вы показали в качестве примера, вы должны написать

strncpy( this->names, names + 5, sizeof(names) - 5 );
1

Другие решения

Вы можете изменить адрес источника для strncpy:

strncpy(this->names, &(names[10]), num_of_chars_to_copy);

Обратите внимание, что нулевой символ не добавляется неявно в конце строки назначения, если длина исходной строки превышает num.

0

Вам нужно четко понимать, что вы хотите сделать … длина переменной names [] от вызова к вызову? Это -> имена фиксированной длины? Обратите внимание, что длина для количества байтов для копирования должна быть числом байтов, доступных в этом-> именах … В противном случае вы рискуете переполнить память.

0

Я разработал для вас эту простую функцию, вы можете использовать ее в качестве справочного кода для более сложной проблемы:

void BackStrCopy(char* src, char* dest, int srcsize, int destsize)
{
if(srcsize >= destsize )
{
do
dest[destsize--] = src[srcsize--];
while( destsize + 1 );
}
}

int main()
{
char* src    = "BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge";
char  dest[50];
BackStrCopy(src, dest, strlen(src), 25);
}

Я проверил это конец работы.

Мне кажется, что код функции не требует комментариев 🙂
Если мое решение поможет вам, пожалуйста, не забудьте проверить его в ответ.

Чао

0
По вопросам рекламы [email protected]