просто используйте sprintf или snprintf.
Использование char * в этом случае вызывает переполнение буфера.
#include <stdio.h>
#include <string.h>
int main ()
{
char arr[100]="Ahmed %s salah %s is %d";
char temp[100];
// fill the temp buffer
sprintf(temp,arr, "Elsayed","Elsenbawy",16);
//then copy
strncpy(arr,temp,100);
printf("%s\n", arr);
return 0;
}