char* p="Hi, this is not going to work";
это не выделяет память для записи
это создает String Literal
, что приводит к Undefined Behaviour
каждый раз, когда вы пытаетесь изменить его содержимое.
для использования p
в качестве буфера для scanf
сделать что-то вроде
char * p = malloc(sizeof(char) * 128); // 128 is an Example
OR
Вы могли бы также сделать:
char p[]="Hi, this is not going to work";
То, что я думаю, это то, что вы действительно хотели сделать.
Имейте в виду, что в конечном итоге это все равно может быть UB
, поскольку scanf()
не проверяет, действительно ли используемое вами место действительно является доступной для записи.
помните:
char * p
является строковым литералом и не должен изменяться
char p[] = "..."
выделяет достаточно памяти для хранения строки внутри "..."
и может быть изменено (я имею в виду его содержимое).
Редактировать:
Хороший трюк, которого следует избегать UB
это
char * p = malloc(sizeof(char) * 128);
scanf("%126s",s);