у меня есть char array
называется names[50]
В основном я использую
strncpy(this->names, names, sizeof(names))
однако это будет только обрезать символы в конце.
Как мне обрезать символы с самого начала?
Например, BillSteveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge
должно быть teveLinusMikeGeorgeBillSteveLinusMikeGeorgeGeorge
Если я правильно понял, то используя строку, которую вы показали в качестве примера, вы должны написать
strncpy( this->names, names + 5, sizeof(names) - 5 );
Вы можете изменить адрес источника для strncpy:
strncpy(this->names, &(names[10]), num_of_chars_to_copy);
Обратите внимание, что нулевой символ не добавляется неявно в конце строки назначения, если длина исходной строки превышает num.
Вам нужно четко понимать, что вы хотите сделать … длина переменной names [] от вызова к вызову? Это -> имена фиксированной длины? Обратите внимание, что длина для количества байтов для копирования должна быть числом байтов, доступных в этом-> именах … В противном случае вы рискуете переполнить память.
Я разработал для вас эту простую функцию, вы можете использовать ее в качестве справочного кода для более сложной проблемы:
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);
}
Я проверил это конец работы.
Мне кажется, что код функции не требует комментариев 🙂
Если мое решение поможет вам, пожалуйста, не забудьте проверить его в ответ.
Чао