вы создаете строку из 3 символов c
, но копируете в нее 10 символов. это ошибка.
это называется переполнением буфера: вы пишете в память, которая вам не принадлежит. поэтому поведение не определено. это может быть сбой, он может нормально работать или изменить другую созданную вами переменную.
так что самое главное - выделить достаточно памяти для c, чтобы вместить содержимое b:
c = (char *)malloc(sizeof(char) * (sizeof(b)+1)); // +1 is for the '\0' char that ends every string in c.
2 - при копировании b
в c
не забудьте поставить конец строки char: '\0'
. это обязательно в стандарте c.
поэтому printf("%s",c);
знает, где заканчивать строку.
3 - вы скопировали 10 символов из b
в c
, но b
содержат только 5 символов (a, b, c, d и '\ 0'), поэтому поведение memcpy
не определено ( Например: memcpy может попытаться прочитать память, которая не может быть прочитана, ...).
Вы можете скопировать только ту память, которая у вас есть: 5 символов b
.
4 - я думаю, что хорошая инструкция для определения b
: char b="abcd";
или char b={'a','b','c','d',0};