Да, C определяет sizeof(char)
как 1, всегда (и C ++ также).
Тем не менее, как правило, я бы посоветовал что-то вроде:
char *ptr = malloc(256 * sizeof(*ptr));
Таким образом, когда ваш начальник говорит что-то вроде: «О, кстати, мы только что получили заказ из Китая, поэтому нам нужно обработать все три китайских алфавита как можно скорее», вы можете изменить его на:
wchar_t *ptr // ...
, а остальные могут остаться прежними. Учитывая, что у вас будет около 10 миллионов головных болей, пытаясь справиться с i18n даже на полпути, устранение даже нескольких стоит. Это, конечно, предполагает обычный случай, когда ваши char
действительно предназначены для хранения символов - если это просто какой-то необработанный буфер, и вы действительно хотите 256 байт памяти, независимо от того, сколько (из нескольких) символы, которые могут быть, вы должны придерживаться malloc(256)
и покончить с этим.