Вероятно, стандарт не определяет, что происходит, когда эти буферы перекрываются.Так что да, valgrind
правильно жаловаться на это.
На практике вы, скорее всего, обнаружите, что ваши strcpy
копируются в порядке слева направо (например,while (*dst++ = *src++);
) и это не проблема.Но это все еще неверно и может иметь проблемы при работе с другими библиотеками C.
Один из правильных стандартов написания этого будет:
memmove(newBuff, newBuff+1, strlen(newBuff));
, поскольку memmove
определен для обработкиперекрытия.(Несмотря на то, что здесь вы в конечном итоге пройдете строку дважды, один раз, чтобы проверить длину, и один раз, чтобы скопировать. Я также выбрал ярлык, поскольку strlen(newBuff)
должно равняться strlen(newBuff+1)+1
, что я и написал изначально.)