Когда вы делаете s1 = "rahul";
, вы перезаписываете только что выделенную память.Эта строка не копирует «rahul» в область malloc, она меняет s1
, указывая на строковую константу «rahul», и выбрасывает указатель на память malloc.
Вместо этогоВы должны использовать strcpy
, чтобы скопировать строку в область malloc:
// s1 = "rahul";
strcpy(s1, "rahul");
Это будет фиксировать ваш вызов на concatenate
, поскольку s1
теперь будет указывать на правильную 15-байтовую областьпамять.
В качестве альтернативы, вы можете отказаться от динамического выделения и выделить + назначить начальную строку сразу:
char s1[15] = "rahul";
Это выделит 15 байтов в стеке и скопирует "rahul" вэто пространство.Обратите внимание на тонкость здесь.В этом случае на самом деле правильно использовать =
, тогда как неверно, когда s1 объявлен как char *s1
.
Один важный урок отладки, который вы можете извлечь из этого, заключается в том, что когда ваша программа падает наконкретная строка кода, которая не означает, что это ошибка.Часто вы делаете ошибку в одной части вашей программы, и эта ошибка не проявляется в сбое до более позднего времени.Это часть того, что делает отладку таким восхитительно расстраивающим процессом!