во-первых, вы должны использовать strcpy
при работе со строками (если они завершены нулем), поскольку в вашем коде в настоящее время есть ошибка, которая скрыта из-за того, что 'hello' и 'there' имеют одинаковую длину, чтобыисправить это, что вы должны делать (то же самое относится к malloc
вызовам):
fwrite(t2.p1,sizeof(char),strlen(t2.p1),op_f);
fwrite(t2.p2,sizeof(char),strlen(t2.p2),op_f); //was also a bug here, you used p1 instead of p2 and the size of each element should have been 1
/* gives o/p there */
memcpy(str,t2.p1,strlen(t2.p1));
memcpy(str,t2.p2,strlen(t2.p2));
Ваша настоящая проблема возникает из-за того, что memcpy
не увеличивает указатели, следовательно, вы должны делать:
strcpy(str,t2.p1);
strcat(str,t2.p2);
или если вы действительно хотите использовать memcpy:
memcpy(str,t2.p1,strlen(t2.p1));
memcpy(str + strlen(t2.p1) - 1,t2.p2,strlen(t2.p2));
наконец, ваши malloc
указатели возврата, а не char
, поэтому str
должно быть char*
.