Вам необходимо назначить для нее пространство памяти либо с помощью malloc
, либо с использованием статического массива. Здесь, в вашем коде, вы используете адрес только одного символа для хранения по адресам этих символов, и других, следующих за ним. Это не определено.
Обратите внимание, шаг за шагом, что вы делаете. Сначала вы назначаете указатель, указывающий на один символ в памяти. Затем, используя *b = 'm'
, вы устанавливаете в памяти символ «m». Но затем вы получаете доступ к следующей позиции памяти (которая не определена, потому что для этой позиции не зарезервирована память), чтобы сохранить другое значение. Это не сработает.
Как это сделать?
У вас есть два варианта. Например:
char *b;
char c[5];
b = &c[0];
*b = 'm';
... //rest of your code
Это будет работать, потому что у вас есть место для 5 символов в c
. Другой вариант - напрямую назначить память для b
, используя malloc
:
char * b = (char*) malloc(5);
*b = 'm';
... // rest of your code
Наконец, может быть, не то, что вы хотите, но вы можете инициализировать массив символов или указатель, используя строковый литерал:
char c[] = "hello";
const char* b = "abcdef";