Синопсис
#include <string.h>
void *memcpy(void * restrict s1, void * restrict s2, size_t n);
Описание
Функция memcpy копирует n символов из объекта, на который указывает s2, в объект, на который указывает s1. Если копирование происходит
между перекрывающимися объектами, поведение не определено.
Второй аргумент memcpy — это адрес источника, а не сам источник. А у вас получается так, что memcpy пытается получить значение из адреса 100, что приводит к падению приложения.
Попробуйте так:
char* buf = (char*) malloc(sizeof(char));
int code = 100;
const char ch = (char) code;
memcpy(buf, &ch, 1);
Кстати, вам обязательно нужно использовать memcpy? Почему бы не сделать так:
*buf = (char) code;
Примечания
sizeof(char) по стандарту равен 1:
When sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.
Так что можно писать char *buf = (char *) malloc(1);.
- Приводить возвращаемое значение
malloc к определенному типу не нужно. См. этот вопрос.
Так что лучше будет писать char *buf = malloc(sizeof *buf);.
memcpy, что вы написали в вопросе все нормально – avp Jun 10 '18 at 10:15memcpy? Откуда взялась идея копировать один символ черезmemcpy? – AnT stands with Russia Jun 10 '18 at 14:32buf[0] = (unsigned)code;, что б не было "расширения по знаку" я добавил unsigned. Поведение будет аналогично правильно-записаному memcpy. – nick_n_a Jun 14 '18 at 07:20