-Ведантический неверный тип аргумента для приращения после приведения
У меня есть код как
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
? Потому что именно так это определяет стандарт.;-))