memset
предшествует (довольно немного) добавлению прототипов функций к C. Без прототипа вы не можете передать char
функции - когда / если вы попытаетесь , он будет повышен до int
, когда вы передадите его, а функция получит int
.
Стоит также отметить, что в C (но не в C ++) символьный литерал типа 'a'
имеет не имеет тип char
- он имеет тип int
, так что вы передаете обычно все равно начинается с int
. По сути, единственный способ начать его как персонажа и получить повышение - это передать переменную char
.
Теоретически, memset
, вероятно, можно изменить, так что он получает char
вместо int
, но вряд ли будет какая-либо выгода и довольно приличная возможность взлома какого-то старого кода или другого. С неизвестной, но потенциально довольно высокой ценой и практически без шансов на реальную выгоду, я бы сказал, что шансы на ее изменение, чтобы получить падение char
прямо на грани между "тонким" и "ничем".
Редактировать (отвечая на комментарии): CHAR_BIT
младшие значащие биты int
используются в качестве значения для записи в цель.