-Ведантический неверный тип аргумента для приращения после приведения

У меня есть код как

while (n--)
{
  *((char*)dest++) = *((char*)src++);
}

где dest а также src являются пустыми указателями и n размер. Цель состоит в том, чтобы повторно реализовать функцию memcpy. При компиляции этого кода с помощью gcc все прекрасно работает, но когда я добавляю -Wpedantic флаг У меня есть четыре предупреждения "неправильный тип аргумента для приращения".

Google говорит мне, что это происходит при попытке использовать арифметику для указателей void, потому что gcc рассматривает тип void как тип 1 байт в этом случае, но устаревшие компиляторы не должны этого делать. Затем мне нужно навести указатель на указатель на символ, но, как вы можете видеть, я уже сделал это!

Любая идея?

1 ответ

Решение

Кастинг (пустота) dest а также src в unsigned char * перед их использованием выдает наиболее чистый код (за счет двух переменных-указателей в стеке).

unsigned char * dest_p = (unsigned char *)dest;
unsigned char * src_p  = (unsigned char *)src;

while ( n-- )
{
    *dest_p++ = *source_p++;
}

(Зачем unsigned? Потому что именно так это определяет стандарт.;-))

Другие вопросы по тегам