Здесь несколько ошибок.
Прежде всего, вы должны знать, что C-строки заканчиваются нулевым байтом. Благодаря этому вам не нужно хранить длину строки, вы просто говорите «вот конец моей строки», используя нулевой байт.
Во-вторых, вы неправильно назовете malloc()
. Если вы хотите выделить память для N-буквенной строки, вы должны написать malloc(N + 1);
(+1, потому что нулевой байт также должен иметь свою ячейку).
И, наконец, вы должны использовать функцию типа strcpy
, чтобы скопировать строку в пункт назначения. В этом случае вы должны позвонить strcpy(allochere, "Hello")
.
Ваш код должен выглядеть следующим образом:
char* allochere;
allochere = malloc(6*sizeof(char));
strcpy(allochere, "Hello");
printf("%s", allochere);
...
// don't forget to deallocate the memory
free(allochere);
1) «sizeof (char)» всегда 1. Это вам не нужно, вы не хотите этого. Вместо этого укажите длину * ACTUAL *. 2) Длина для «Hello» будет 6: H, e, l, l, o, \ 0: 'allochere = malloc (6);' 3) Используйте 'strcpy()' для копирования «Hello» в allochere. Простое присваивание просто устанавливает значение указателя, а не содержимое строки. – paulsm4